首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript hasOwnProperty

javascript hasOwnProperty
EN

Stack Overflow用户
提问于 2013-01-28 02:23:06
回答 2查看 1.3K关注 0票数 0

我正在尝试让我的一些类型具有一种多重“继承”,如下所示:

代码语言:javascript
复制
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?它应该有一些直接属于对象的成员。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-28 02:38:36

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

代码语言:javascript
复制
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()创建对象的方式,它属于上面示例的第一类。

票数 3
EN

Stack Overflow用户

发布于 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__链。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14550611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档