我正试图让我的某些类型具有一种多重'继承',如下所示:
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?应该有一些直接成为对象的成员。
答案 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__
链。