javascript - 什么时候使用 __proto__ 什么时候使用原型(prototype)

标签 javascript

所有,我总是对对象的__proto__prototype属性感到困惑,特别是在原型(prototype)继承链中,假设有一个名为test的对象,代码如下。

test.add();//try to call a method name add.

在我的理解中,我画了一个图表来演示搜索的流程。但我不确定它是否正确。请帮助审查它。谢谢。

enter image description here

根据 Minko Gechev 的回答更正了它。

enter image description here

最佳答案

只有函数有 prototype 属性,但任何对象都有 __proto__ 属性。

通常,显式更改 __proto__ 属性并不是一个好主意,最好使用类似 Object.create 的东西。

这是一个例子:

function Person() {
}
var proto = { bar: 'baz' };
Person.prototype = proto;

通过这种方式,您使用构造函数 Person 创建的任何对象都将具有引用 proto__proto__ 属性

作为结论,我们可以说:

prototype 属性仅用于构造函数,它设置将使用此构造函数创建的所有对象的 __proto__ 属性。当解释器正在寻找给定对象 foo 的属性时,它首先使用对象 foo 然后是 foo.__proto__ 然后是 foo .__proto__.__proto__ 等它是否找到该属性。

关于javascript - 什么时候使用 __proto__ 什么时候使用原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198371/

相关文章:

javascript - 如何检查是否引用了 javascript 变量,以及从何处引用?

javascript - 如何将某些样式应用于 JavaScript 的 "node"对象

JavaScript 正则表达式帮助

javascript - Node 中库的回调被阻塞

javascript - 账号onLogin hook meteor 循环

javascript - angularJS - 添加带有 ng-options 的静态选项

javascript - 使用 this.argu 存储参数是一种好习惯吗?

javascript - 使用 jQuery 固定位置侧边栏

javascript - Nodejs : Issue with async and forEach - Need to wait the async to resolve

php - PHP 中的警报输入名称