试图刷新我对Prototype Tree的了解。这有什么不对?

时间:2015-04-16 14:04:08

标签: javascript

根据http://js4py.readthedocs.org/en/latest/object-tree.html

  

所有JavaScript对象都是继承树的一部分。每个对象   树有一个父对象,也称为原型   对象(孩子)。

我正在玩,以确保我理解正确。由于"lakdas"从其父myOtherObj继承了字段x,因此不应该打印myObj以下内容吗?为什么要记录undefined

var myObj = { x:"lakdas" };
var myOtherObj = { y:"lkjaas" };
myOtherObj.prototype = myObj;
console.log(myOtherObj.x); /* Should print "lakdas", right? */

1 个答案:

答案 0 :(得分:4)

您无法通过分配prototype属性来更改对象的原型。在许多引擎中,在创建对象后根本无法更改原型。您可以在对象创建时设置原型:

var myObj = { x:"lakdas" };
var myOtherObj = Object.create(myObj); // sets prototype
myOtherObj.y = "lkjaas";
console.log(myOtherObj.x); // prints "lakdas"

函数具有prototype属性 - 当您使用函数作为构造函数时,存储在函数的prototype属性中的对象将成为构造对象的原型:< / p>

var myObj = { x:"lakdas" };
function foo() {
  this.y = "lkjaas";
}
foo.prototype = myObj;
var myOtherObj = new foo();
console.log(myOtherObj.x); // prints "lakdas"