文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
原型
每个对象都与对象原型关联,继承了对象原型的属性。
从文本对象( {}
)创建的所有对象都自动链接到的 Object.prototype,这个对象来自 JavaScript 标准。
当 JavaScript 解释器(在浏览器中一个模块),试图找到一个属性,它要检索,如下面的代码:
var adult = {age: 26},
retrievedProperty = adult.age;
// 看上一行
首先,解释器检查对象有的每个属性。例如, adult
只有一个自己的属性 - age
。但是,除此之外,实际上还有几个属性,这是继承自 Object.prototype。
var stringRepresentation = adult.toString();
// 变量的值为 '[object Object]'
toString
是一个 Object.prototype 的属性,这是继承。它有一个函数,返回值为一个对象的字符串。如果希望它返回一个更有意义的东西,那么你可以将其覆盖。简单的添加一个属性到 adult 对象。
adult.toString = function(){
return "I'm "+this.age;
}
如果现在调用 toString
函数,解释器将发现一个新的对象中的属性然后停止。
因此,通过深入原型,解释器检索第一个对象本身的属性。
要设置自己的对象为原型而不是默认的 Object.prototype,你可以调用以下的 Object.create
:
var child = Object.create(adult);
/* 通过这种方式创建的对象可以让我们轻松替换默认的 Object.prototype 成我们想要的。在这里,child 的原型是 adult 对象。
*/
child.age = 8;
/* 在此之前,child 根本没有自己的年龄属性,解释器会寻找 child 的原型中是否有该属性。现在,当我们设置了 child 自身年龄,解释器就不深入寻找了。
注意:adult 的年龄仍为 26。
*/
var stringRepresentation = child.toString();
// 值为 "I'm 8"。
/* 注意:我们没覆盖 child 的 toString 属性,因此 adult 类函数不会被调用。如果 adult 没有 toString 属性,那么 Object.prototype 的 toString 类函数将被调用,我们将得到"[object Object]" 而不是 "I'm 8" 。
*/
child
'的原型是 adult
,其原型为 Object.prototype
。这一系列原型被称为 原型链 。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论