问题 创建像C#属性的javascript属性


是否可以在javascript对象上创建一个与C#中的属性类似的属性。

例: 我使用dojo创建了一个自动调整大小的textarea小部件。为了从我的小部件中获取“value”属性,我已经连接到onchange事件,并且每次textarea的值发生变化时我都会设置一个变量。

有没有办法在不挂钩onchange事件的情况下完成此任务。

编辑

换句话说,是否可以在JavaScript中编写类似于getter和/或setter的东西。


8511
2017-07-08 22:48


起源



答案:


它可以在ECMAScript 5实现中包含 所有主流浏览器的最新版本。 ECMAScript 5规范增加了标准化的getter和setter。一个怪癖是IE 8具有此功能,但仅限于DOM节点。这是语法的样子:

var obj = {};

Object.defineProperty(obj, "value", {
    get: function () {
        return this.val;
    },
    set: function(val) {
        this.val = val;
    }
});

Mozilla已经有很长时间的getter和setter的专有实现,后来也被WebKit和Opera采用,但这在IE中不可用。


15
2017-07-08 23:39





我不确定你在这里问什么。您始终可以在没有onchange事件的情况下获取textarea的值。你必须得到对象,然后看看value属性。

例如,如果您的textarea有id =“mytext”,您可以这样做

var mytextarea = document.getElementById("mytext");
var text = mytextarea.value;

-1
2017-07-08 23:03



我知道约翰。谢谢。我编辑了我的问题。我希望现在更清楚一点。 - Seattle Leonard
对我来说,这似乎并不清楚。您是否希望将属性添加到属性getter和setter? - Davy8
就是这样 - Seattle Leonard


答案:


它可以在ECMAScript 5实现中包含 所有主流浏览器的最新版本。 ECMAScript 5规范增加了标准化的getter和setter。一个怪癖是IE 8具有此功能,但仅限于DOM节点。这是语法的样子:

var obj = {};

Object.defineProperty(obj, "value", {
    get: function () {
        return this.val;
    },
    set: function(val) {
        this.val = val;
    }
});

Mozilla已经有很长时间的getter和setter的专有实现,后来也被WebKit和Opera采用,但这在IE中不可用。


15
2017-07-08 23:39





我不确定你在这里问什么。您始终可以在没有onchange事件的情况下获取textarea的值。你必须得到对象,然后看看value属性。

例如,如果您的textarea有id =“mytext”,您可以这样做

var mytextarea = document.getElementById("mytext");
var text = mytextarea.value;

-1
2017-07-08 23:03



我知道约翰。谢谢。我编辑了我的问题。我希望现在更清楚一点。 - Seattle Leonard
对我来说,这似乎并不清楚。您是否希望将属性添加到属性getter和setter? - Davy8
就是这样 - Seattle Leonard