gpt4 book ai didi

javascript - 使用对象原型(prototype)在 JavaScript 中设置字段的正确方法

转载 作者:行者123 更新时间:2023-11-30 13:19:10 25 4
gpt4 key购买 nike

我正在尝试找出使用原型(prototype)设置我的 JavaScript 对象字段的正确方法。

我可以使用以下内容:

function myData() {};
myData.prototype.a = null;
myData.prototype.b = null;
myData.prototype.c = null;

var data = new myData();
data.a = 1;
data.b = 2;
data.c = 3;

但是,这似乎没有遵循适当的封装协议(protocol)。

或者,我可以这样做:

function myData() {
this._a = null;
this._b = null;
this._c = null;
};

myData.prototype.__defineGetter__("a", function() {
return this._a;
});

myData.prototype.__defineSetter__("a", function(val) {
this._a = val;
});

当我的 getter 只是返回私有(private)变量的值而不对它做任何事情时,这个方法似乎有点过分了。

此外,如果我稍后才拥有这些值,那么在构造函数中将这些值设置为 null 是否正确?即 - 我稍后设置它们。

最佳答案

JavaScript 是一种动态语言,如果您完全不需要封装那些您不必封装的属性。因此,第一个示例非常好。

否则,如果您需要封装它们,并且您处于符合 ES5 的环境中,您应该使用 getset,因为 __defineGetter____defineSetter__ 已弃用且不标准(参见:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/DefineGetterhttps://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Objects#Defining_getters_and_setters)

一个例子:

function MyData() {
// set to the prototype's value
var a = this.a;
var b = this.b;
var c = this.c;

Object.defineProperties(this, {
"a": {
get : function(){ return a; },
set : function(value) { a = value }
},
"b": {
get : function(){ return b; },
set : function(value) { b = value }
},
"c": {
get : function(){ return c; },
set : function(value) { c = value }
}
});
};

MyData.prototype.a = null;
MyData.prototype.b = null;
MyData.prototype.c = null;

参见 Object.defineProperties

关于javascript - 使用对象原型(prototype)在 JavaScript 中设置字段的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10906969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com