JS原型链

    xiaoxiao2022-07-07  188

    1、原型链

    原型链:一个实例化对象在寻找一个属性的时候,会先从自身属性寻找,其次到上级原型链,直到Object,如果还找不到就分会undefined,这就称之为原型链。

    下面绿色框框的是原型链

    function CreatP(n){    this.name = n; } CreatP.prototype.sayHeelo = function(){    consloe.log('Heelo!'); }; CreatP.prototype.eat = function(){    consloe.log(this.name); } var a = new CreatP('小阳','18'); console.log(a); ​ /* 1、这个时候再实例化的对象里有a.__proto__属性, 这个属性指向了CreatP.prototype原型,也就是内存地址相同 */ console.log(a.__proto__ == CreatP.prototype);//true /* 2、 这个时候,CreatP.prototype也是对象, 所以下面也有CreatP.prototype.__proto__,而这个属性的值为Object.prototype */ console.log(CreatP.prototype.__proto__ === Object.prototype);//true /* 3、直到Object.prototype就没有__proto__的值(null) 也就是Object是所有原型的顶端,而下面的__proto__和 prototype链接起来的就是原型链 */ console.log(Object.prototype.__proto__ === null);//true

     

    2、原型链小例子

     

    /* 构造函数没有的话,就向原型链寻找 */ function Creat(n){ } CreatP.prototype.name = '楠楠'; var a = new CreatP(); console.log(a.name);//楠楠 ​ /* 例2 向Object寻值*/ function Creat(n){ } Object.prototype.name = '楠楠';//Object原型链 var a = new CreatP(); console.log(a.name);//楠楠

    总结:永远不要向Object.prototype添加属性,因为给Object原型添加了属性,就相当于给所有的对象都添加了这个属性,污染了全局。

    用到的关键字:prototype(原型)、new、this

    函数本身就有prototype属性,

    被new后就会拥有__proto__属性

    最新回复(0)