web前端:理解js原型链

原型链是js中最抽象也是最难的一块知识之一 , 小编整理了一下 , 为大家讲解原型链的重要知识 , 希望对大家有所帮助 。 东西/材料 javascript
操作方式 01 【web前端:理解js原型链】进修原型链之前我们先熟悉一下机关函数 , 代码如下:

function S() {
this.name = 'xxx';
this.say = function() { console.log(this.name) }
}
var s1 = new S();

此中 , s1是S的实例 , s1的__proto__(大师先不消管__proto__属性 , 后续会讲到)中有一个constructor(机关函数)属性 , 该属性指标的目的S 。
在这里 , 大师可以记住两点:
1.s1是机关函数S的实例;
2.s1.__proto__.constructor===S 也可以写当作 s1.constructor===S;

web前端:理解js原型链

文章插图

02 接下来我们来看下一段代码:

function S2() {}
S2.prototype.name = 'XXX';
S2.prototype.say = function() {
console.log(this.name);
}

var s2 = new S2();
var s3 = new S2();
console.log(s2.sayName === s3.sayName);//true
console.log(s2.__proto__===S2.prototype);//true

这一段代码中我们可以看到一个新属性——prototype , 这是什么呢 , 其实这就是机关函数S2的原型对象 , 每个对象都有__proto__属性 , 可是只有函数对象才有prototype属性 。 而s2是机关函数S2的实例 , 而s2.__proto__指标的目的的就是S2的原型对象 , 即s2.__proto__===S2.prototype 。 获得一个结论 , 实例的__proto__属性指标的目的的就是其机关函数的原型对象 。

web前端:理解js原型链

文章插图

03 继续上一步的代码 , 我们添加代码继续调试:

console.log(s2.__proto__);//返回S2的原型对象
console.log(S2.prototype);//返回S2的原型对象

console.log(s2.__proto__.__proto__);//返回Object对象
console.log(S2.prototype.__proto__);//返回Object对象

console.log(s2.__proto__.__proto__.__proto__);//返回null
console.log(S2.prototype.__proto__.__proto__);//返回null

其实 , S2的原型对象上还有原型对象 , 因为S2的原型对象也半斤八两于只是Object对象的一个实例 。

web前端:理解js原型链

文章插图

04 在这里我给大师画了一张图 , 便于大师理解原型链 。

web前端:理解js原型链

文章插图


出格提醒 码子不易 , 小编若有说得不合错误的处所 , 望大师指点包含 , 感谢

以上内容就是web前端:理解js原型链的内容啦 , 希望对你有所帮助哦!

    推荐阅读