javascript hasOwnProperty

时间:2013-01-27 18:23:06

标签: javascript multiple-inheritance hasownproperty

我正试图让我的某些类型具有一种多重'继承',如下所示:

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会因为eveything而返回false?应该有一些直接成为对象的成员。

2 个答案:

答案 0 :(得分: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()创建对象的方式,该方式属于上述示例的第一类。

答案 1 :(得分:2)

  

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

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

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