在 javascript 中的 Object.prototype 上添加自定义方法的副作用
side affect of adding custom methods on Object.prototype in javascript
我正在向 Master Object.prototype
添加自定义 add()
方法,以便所有通用对象都能够访问此 add()
方法
Object.prototype.add = function(value1, value2) {
return value1 + value2;
};
问题 1:如何检查此 add()
方法是否可枚举?
我正在创建一个通用对象
var obj = {
}
我正在使用 for-in
循环打印所有属性(这应该打印自己的属性和原型属性)
for (prop in obj){
console.log("property is :" + prop);
}
这打印了 //property is :add
问题 2:for-in
循环是否同时打印可枚举和不可枚举的属性?
让我们使用 Object.keys
,其中 returns 属性数组(仅当可枚举时)
var propKeys = Object.keys(obj);
console.log(propKeys); //prints an empty array []
问题 3:为什么 Object.keys
不打印 add
属性?
要回答问题 2,当且仅当它是可枚举的时,for-in
循环将遍历 属性,因此没有不可枚举的属性。
要回答问题 1,为了检查 属性 是否可枚举,您实际上可以使用 for-in
循环,例如:
function isEnumerable(object, property) {
for (prop in object) {
if (prop === property) {
return true;
}
}
return false;
}
您的 for-in
循环打印 "add" 这一事实意味着它是可枚举的。而且,事实上,您在自己的代码中定义的所有属性在默认情况下都是可枚举的。
要回答问题 3,Object.keys()
只会为您提供既是可枚举属性又是自有属性的属性。由于 .add
是继承的,因此不会使用 Object.keys()
.
显示
希望对您有所帮助!
我正在向 Master Object.prototype
添加自定义 add()
方法,以便所有通用对象都能够访问此 add()
方法
Object.prototype.add = function(value1, value2) {
return value1 + value2;
};
问题 1:如何检查此 add()
方法是否可枚举?
我正在创建一个通用对象
var obj = {
}
我正在使用 for-in
循环打印所有属性(这应该打印自己的属性和原型属性)
for (prop in obj){
console.log("property is :" + prop);
}
这打印了 //property is :add
问题 2:for-in
循环是否同时打印可枚举和不可枚举的属性?
让我们使用 Object.keys
,其中 returns 属性数组(仅当可枚举时)
var propKeys = Object.keys(obj);
console.log(propKeys); //prints an empty array []
问题 3:为什么 Object.keys
不打印 add
属性?
要回答问题 2,当且仅当它是可枚举的时,for-in
循环将遍历 属性,因此没有不可枚举的属性。
要回答问题 1,为了检查 属性 是否可枚举,您实际上可以使用 for-in
循环,例如:
function isEnumerable(object, property) {
for (prop in object) {
if (prop === property) {
return true;
}
}
return false;
}
您的 for-in
循环打印 "add" 这一事实意味着它是可枚举的。而且,事实上,您在自己的代码中定义的所有属性在默认情况下都是可枚举的。
要回答问题 3,Object.keys()
只会为您提供既是可枚举属性又是自有属性的属性。由于 .add
是继承的,因此不会使用 Object.keys()
.
希望对您有所帮助!