javascript - 通过调用函数定义Javascript的对象属性

标签 javascript properties javascript-objects

假设我有一个 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/

相关文章:

javascript - 如何获取在 HTML5 Canvas 上单击的坐标?

javascript - 在单页网站上设置联系表单/脚本

spring - 如何访问 JAR 文件中的属性?

wpf - 如何确定 View Model 中定义的属性是否绑定(bind)到 UI 中的任何控件?

javascript从两级数组中提取id以获取新对象中的键值对

javascript - 主要 JavaScript 引擎中 JavaScript 关联数组(动态对象属性)的检索/插入的复杂性是多少?

javascript - 如何使用翻转插件在悬停时切换图像

javascript - 使用 jeditable 和 autogrow 的问题

javascript - 为什么 Object.getOwnPropertyNames() 不列出所有属性和方法?

javascript - 映射数组中对象中的数组