javascript - 从 Object.defineProperties() 定义的函数调用中获取 'this'

标签 javascript jquery

我正在尝试使用 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/

相关文章:

javascript - WordPress通过AJAX从页面获取内容

Jquery 点击监听器未触发(html、css、jquery)

javascript - 下拉列表中的 jQuery 未定义 selectedIndex

javascript - 如何停止 meteor ?

javascript - MongoDB,聚合 $match 不适用于 ObjectId

javascript - 返回列表时,DatePicker 中的 beforeShowDate 始终为真

javascript - 如何用 Jquery/JS 交换 2 @Html.DropDownListFor

javascript - 打开模式后如何单击模式内的按钮?

javascript - 创建自定义 html 输入

javascript - 如何使用 jquery/javascript 验证表单?