我正在尝试使用 JavaScript 向 Object
的 __proto__
添加一个函数。
显然,jQuery 在将原型(prototype)函数定义为 Object.prototype.myFunc = function() {};
时会遇到一些问题,所以我发现最好的解决方法是使用 Object.defineProperties()
这样我就可以将 enumerable
设置为 false
,从而使用 jQuery。
我正在尝试使用以下代码
Object.defineProperties(Object.prototype, {
length: {
value: (function () {
return Object.keys(this).length;
})(),
enumerable: false
}
});
但是当使用 Objects.defineProperties()
时,this
关键字的工作方式与
Object.prototype.myFunc = function() {
return Object.keys(this).length;
};
如何使用 Object.defineProperties()
或一些类似的变通方法获得与上述代码相同的结果?
最佳答案
如何通过 get()
更改 value
属性?
你可以替换:
value: (function () {
return Object.keys(this).length;
})(),
与:
get() {
return Object.keys(this).length;
},
Object.defineProperties(Object.prototype, {
length: {
get() {
return Object.keys(this).length;
},
enumerable: false,
}
});
const obj1 = {
a: 1,
b: 2,
c: 3,
};
const obj2 = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
};
console.log('obj1.length:', obj1.length);
console.log('obj2.length:', obj2.length);
关于javascript - 从 Object.defineProperties() 定义的函数调用中获取 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377915/