让我们创建新对象,然后更改其原型:
#rectsearchresults{
position: relative;
margin-top: -10px;
margin-left: -0px;
background: #ffffff;
padding-left: 20px;
padding-right: 20px;
padding-bottom: 20px;
padding-top: 20px;
width:916px;
}
#result{
margin-bottom: 20px;
}
#resultheader{
margin-left:10px;
color:black;
font-size: 15px;
margin-top: -20px;
}
我们看到var obj = new Object;
obj.__proto__ = new Date;
obj.setTime // is a function
现在从其新原型obj
继承属性。
然后,我们创建新对象不带原型并更改其原型:
new Date
我们发现原型链不起作用 - var obj = Object.create(null);
obj.__proto__ = new Date;
obj.setTime // undefined
未继承obj
的属性,即使其new Date
为__proto__
。
为什么?
(我想这是因为new Date
在Object
属性的setter中有一些内部逻辑,但不确定
答案 0 :(得分:1)
当我们需要显式访问/修改对象的原型时,这是__proto__
和Object.getPrototypeOf()
/ Object.setPrototypeOf()
之间的一个细微差别。
这是我说服自己应该Object.setPrototypeOf()
和Object.getPrototypeOf()
代替__proto__
的原因之一。
var o = Object.create(null);
Object.setPrototypeOf(o, new Date());
console.log(o.setTime)
答案 1 :(得分:0)
执行var obj = Object.create(null);
时,您创建的对象没有__proto__
。
在一行一行中,您只需创建一个名为__proto__
的字段,如果仔细观察该字段本身将有一个名为__proto__
的内部字段。
您可以使用任何名称创建任何字段。在您的情况下,您选择__proto__
作为字段的名称。它可能是任何东西。