首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中添加自定义方法对Object.prototype的副作用

在javascript中添加自定义方法对Object.prototype的副作用
EN

Stack Overflow用户
提问于 2016-04-15 03:58:05
回答 1查看 79关注 0票数 1

我将向主add()添加一个自定义Object.prototype方法,以便所有泛型对象都能够访问此add()方法

代码语言:javascript
复制
Object.prototype.add = function(value1, value2) {
return value1 + value2;
};

问题1:如何检查此add()方法是否可枚举?

我正在创建一个通用对象

代码语言:javascript
复制
var obj = {

}

我使用for-in循环打印所有属性(这应该同时打印自己的属性和原型属性)

代码语言:javascript
复制
for (prop in obj){

    console.log("property is :" + prop);
}

这个打印的//property is :add

问题2:for-in循环是否同时打印可枚举属性和不可枚举属性?

让我们使用Object.keys,它返回属性数组(只有在可枚举的情况下)

代码语言:javascript
复制
var propKeys = Object.keys(obj);
console.log(propKeys); //prints an empty array []

问题3:为什么Object.keys不打印add属性?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 07:01:46

要回答问题2,for-in循环将遍历属性当且仅当它是可枚举的,因此没有不可枚举的属性。

要回答问题1,为了检查属性是否可枚举,可以实际使用for-in循环,如下所示:

代码语言:javascript
复制
function isEnumerable(object, property) {
    for (prop in object) {  
        if (prop === property) {
            return true;
        }
    }
    return false;
}

您的for-in循环打印"add“表示它是可枚举的。事实上,在您自己的代码中定义的所有属性在默认情况下都是可枚举的。

要回答问题3,只有当属性是可枚举的和自己的属性时,Object.keys()才会为您提供属性。由于.add是继承的,所以它不会使用Object.keys()显示。

希望这能有所帮助!

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

https://stackoverflow.com/questions/36638004

复制
相关文章

相似问题

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