我正在尝试让我的一些类型具有一种多重“继承”,如下所示:
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.ClickableMesh.prototype添加任何UIControls.UIControl.prototype属性。为什么hasOwnProperty对每件事都返回false?它应该有一些直接属于对象的成员。
发布于 2013-01-28 02:38:36
仅当属性属于对象本身,而不是从其原型继承时,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-28 02:33:54
hasOwnProperty ...与in操作符不同,此方法不检查对象的原型链。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
JS中的对象是散列映射,hasOwnProperty的唯一目的是检查该散列映射是否包含该属性。hasOwnProperty不会遍历__proto__链。
https://stackoverflow.com/questions/14550611
复制相似问题