假设我有一个javascript对象,我想为它定义属性和属性属性。即我想通过函数定义scaleRatio。我该怎么做?
我知道我可以做canvasData.scaleRatio = function(){};
然后定义Object.defineProperty{canvasData, 'scaleRatio', {enumerable: true, configurable: false};
?
是否有直接在对象上定义属性和属性的系统方法?我知道你可以在defineProperty中设置:function(){}但是我不想做那个额外的步骤canvasData.scaleRatio ='asdf';为什么我不能在object.defineProperty中使用iffe?
更新
我的理由是我想调用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);,
}
答案 0 :(得分:1)
为什么我不能在object.defineProperty中使用iffe?
您可以使用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
属性是一个方法,而不是静态属性。