当前位置 : 主页 > 大数据 > 区块链 >

将值设置为__proto__`和`javascript中的原型

来源:互联网 收集:自由互联 发布时间:2021-06-22
参见英文答案 __proto__ VS. prototype in JavaScript25个 __proto__和prototype之间有什么区别 我在网上阅读了大部分文章,但我仍然无法理解它. 据我所理解 __proto__是原型对象的属性 原型是实际的对
参见英文答案 > __proto__ VS. prototype in JavaScript                                    25个
__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"
网友评论