js原型链

js原型链

 

 js原型链

 

 

  function People(name){             this.name=name;         }
        People.prototype.showName=function(){  prototype原型             console.log(this.name);         }
        function Student(){  函数不可以直接调用 和别的相等
        }
        Student.prototype=new People("张三")   study给了People 
        Student.prototype.study=function(){              console.log("学习");         }
        var stu=new Student();  Student.prototype===stu.__proto__
        stu.study();         stu.showName();

        console.dir(stu.__proto__===Student.prototype)         console.dir(Student.prototype.__proto__===People.prototype)         console.dir(stu.__proto__.__proto__===People.prototype)
        console.dir(Student.prototype.__proto__.__proto__)  输出null 原型链的终止
        console.dir(stu.__proto__.__proto__.__proto__)         1:Student.prototype         2: People.prototype         3:Object.prototype  原型链的最终指向Object         4:null  Object的原型是null
        __proto__ 对象的原型         prototype 构造函数的原型

 

Rect.prototype = new Shape(); 优点: 1) 正确设置原型链实现继承 2) 父类实例属性得到继承,原型链查找效率提高,也能为一些属性提供合理的默认值 缺点: 1) 父类实例属性为引用类型时,不恰当地修改会导致所有子类被修改 2) 创建父类实例作为子类原型时,可能无法确定构造函数需要的合理参数,这样提供的参数继承 给子类没有实际意义,当子类需要这些参数时应该在构造函数中进行初始化和设置 Rect.prototype = Shape.prototype; 1) 优点:正确设置原型链实现继承 2) 缺点:父类构造函数原型与子类相同。修改子类原型添加方法会修改父类   Rect.prototype = Object.create(Shape.prototype); Rect.prototype.area = function () { // do something }; 1) 优点:正确设置原型链且避免方法 1.2 中的缺点 2) 缺点:ES5 方法需要注意兼容性
上一篇:JavaScript基础之浅谈原型和原型链


下一篇:js高级 继承