参见英文答案 __proto__ VS. prototype in JavaScript25个 __proto__和prototype之间有什么区别 我在网上阅读了大部分文章,但我仍然无法理解它. 据我所理解 __proto__是原型对象的属性 原型是实际的对
__proto__和prototype之间有什么区别
我在网上阅读了大部分文章,但我仍然无法理解它.
据我所理解
__proto__是原型对象的属性
原型是实际的对象
我对么? ….
为什么只有函数具有原型属性?
它是如何成为一个对象?
var fn = function(){}; console.dir(fn);
产量
06001
使用对象和函数我尝试设置__proto__的值
和Chrome控制台中的原型如下所示
//create object and display it var o = {name : 'ss'}; console.dir(o);
产量
06003
//set the values o.__proto__ = 'aaa'; o.prototype = 'bbb'; //after set the values display the object console.dir(o);
产量
06005
//create function and display it var fn = function(){}; console.dir(fn);
产量
06001
//set the values fn.prototype = 'fff'; fn.__proto__ = 'eee'; //after set the values display the object console.dir(fn);
产量
06009
然后我意识到我不能为__proto__设置值,但可以将值设置为原型.为什么我不能为__proto__设置值?
实际上这很简单.> {object} .__ proto__是对{constructor function} .prototype对象的引用.
JavaScript中的operator new {constructor function}(params)做了三件大事:
>创建新对象,让它成为’obj’.
>将具有此设置的{constructor function}调用到该新生对象(obj).
>设置obj .__ proto__ = {constructor function} .prototype;
这就是它.
obj .__ proto__建立了单个链表,用于查找未在对象本身中定义的属性.当它被设置为{constructor function} .prototype对象时,我们可以将该原型视为对象方法的“机架” – 与对象实例相关联的函数.
例:
function Foo() {} Foo.prototype.bar = function() { return "foo.bar here"; } var obj = new Foo(); // creating object with __proto__ set to Foo.prototype; obj.bar(); // will return "foo.bar here"