假设我有一个 javascript 对象,我想为其定义一个属性和属性。即我想通过函数定义scaleRatio。我该怎么办?
我知道我可以做canvasData.scaleRatio = function(){};
然后我要定义Object.defineProperty{canvasData, 'scaleRatio', {enumerable: true,configurable: false};
吗?
是否有直接在对象上定义属性和属性的系统方法?我知道你可以在 DefineProperty 中执行 set: function(){} 但我不想执行额外的步骤 canvasData.scaleRatio = 'asdf';为什么我不能在 object.defineProperty 中使用 ife ?
更新:
我这样做的原因是我想调用 setupCanvas 并初始化 CanvasObject 及其所有属性。它的一些属性必须通过调用函数来计算。我还希望能够指定属性属性。我怎样才能系统地做到这一点?
function setupCanvas(chart){
canvasData = Object.defineProperties({}, {
scaleRatio: {
value: function(){
console.log('gets here');
var ratio = chart.data.datasets[0].data.reduce(function(prev,curr){
if (prev > curr){
return prev;
}
return curr;
});
return $(canvas).outerWidth() / (scaleRatio + 10);
},
enumerable: true,
configurable: false,
writable: true
}
});
console.log(canvasData.scaleRatio);,
}
最佳答案
Why can't I just use an iffe inside object.defineProperty ?
您可以用 IIFE 代替该值。以下是执行此操作的正确语法示例:
var canvasData = Object.defineProperties({}, {
scaleRatio: {
value: (function(){
// put whatever logic you want here
return Math.random();
})(),
writable: true,
configurable: false,
enumerable: true
}
});
console.log(canvasData);
console.log(canvasData.scaleRatio);
您在代码示例中显示的 value
函数不是 IIFE - 它只是一个常规函数,因此您创建的 scaleRatio
属性是一个方法,而不是静态属性。
关于javascript - 通过调用函数定义Javascript的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38780589/