通过调用函数定义 Javascript 的对象 属性
Defining Javascript's object property by invoking function
假设我有一个 javascript 对象,我想为它定义一个 属性 和 属性 属性。即我想通过一个函数定义 scaleRatio 。我该怎么做?
我知道我可以做到 canvasData.scaleRatio = function(){};
然后我定义 Object.defineProperty{canvasData, 'scaleRatio', {enumerable: true, configurable: false};
吗?
是否有直接在对象上定义特性和特性的系统方法?我知道你可以在 defineProperty 里面做 set: 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);,
}
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 对象,我想为它定义一个 属性 和 属性 属性。即我想通过一个函数定义 scaleRatio 。我该怎么做?
我知道我可以做到 canvasData.scaleRatio = function(){};
然后我定义 Object.defineProperty{canvasData, 'scaleRatio', {enumerable: true, configurable: false};
吗?
是否有直接在对象上定义特性和特性的系统方法?我知道你可以在 defineProperty 里面做 set: 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);,
}
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
属性 是一种方法,而不是静态 属性.