0

我试图让我的一些类型拥有一种多重“继承”,如下所示:

UIControls.ClickableMesh.prototype = Object.create(THREE.Mesh.prototype);

var UIConProto = Object.create(UIControls.UIControl.prototype);

for(var i in UIConProto){
    if(UIConProto.hasOwnProperty(i)){
        UIControls.ClickableMesh.prototype[i] = UIConProto[i];
    }
}

但是 for 循环没有向UIControls.UIControl.prototype我的新类型原型添加任何属性UIControls.ClickableMesh.prototype。为什么hasOwnProperty返回 false ?它应该有一些直接属于对象的成员。

4

2 回答 2

3

hasOwnProperty仅当属性属于对象本身时才返回 true,而不是从其原型继承。例如:

function Foo() {
  this.n = 123;
}
Foo.prototype.s = "hello";

var foo = new Foo();

foo.hasOwnProperty("s"); // False, since s is inherited from the prototype object.
foo.hasOwnProperty("n"); // True, since n is the property of foo itself.

您可能会注意到Object.create()创建对象的方式,它属于上面示例的第一类。

于 2013-01-27T18:38:36.420 回答
2

hasOwnProperty ... 与in运算符不同,此方法不检查对象的原型链

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

JS 中的对象是哈希映射,hasOwnProperty 的唯一目的是检查哈希映射是否包含该属性。hasOwnProperty 不遍历__proto__链。

于 2013-01-27T18:33:53.760 回答