首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数实例hasOwnProperty()混淆

函数实例hasOwnProperty()混淆
EN

Stack Overflow用户
提问于 2014-01-10 15:09:33
回答 2查看 75关注 0票数 0

既然doOtherStuff函数是直接在b实例上定义的,而不是在prototype链中“上面”定义的(比如base甚至Object),那么为什么b.hasOwnProperty('doOtherStuff')返回false呢?

代码语言:javascript
复制
var base = (function () {

    var cls = function () { };

    cls.prototype.doStuff = function () {
        console.log('dostuff');
    };

    return cls;

})();

var child = (function () {

    var cls = function () {
        base.call(this);
    };

    cls.prototype = Object.create(base.prototype);
    cls.prototype.constructor = child;

    cls.prototype.doOtherStuff = function () { // <--
        console.log('doOtherStuff');
    }

    return cls;

})();

var b = new child();

console.log(b.hasOwnProperty('doOtherStuff'), 'doOtherStuff' in b); //false true

http://jsfiddle.net/5FzBQ/

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-10 15:11:06

因为doOtherStuff函数是直接在b实例上定义的

这不是真的;您在cls.prototype中定义了该属性。

hasOwnProperty()只有在编写this.property = ... (或b.property)时才会返回true。

票数 3
EN

Stack Overflow用户

发布于 2014-01-10 15:19:01

doOtherStuff不是直接在b上定义的,b从它的原型继承doOtherStuffhasOwnProperty区分直接在对象上定义的属性与从原型继承的属性,而in没有。

请参阅:Objects/Object/hasOwnProperty

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

https://stackoverflow.com/questions/21047716

复制
相关文章

相似问题

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