gpt4 book ai didi

javascript - Javascript 中 setter 和 getter 定义风格的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:32:47 25 4
gpt4 key购买 nike

我正在探索 JavaScript 中的 setter 和 getter:

代码1:

http://jsfiddle.net/imrukhan/7j8ZS/3/

引用:http://whereswalden.com/2010/04/16/more-spidermonkey-changes-ancient-esoteric-very-rarely-used-syntax-for-creating-getters-and-setters-is-being-removed/

<html>
<head>
<script>
var Person = function(name){
this.name = name;
defineGetter(this, "Name", function() {
console.log("inside getter method");
return this.name;
});
defineSetter(this, "Name", function(val) {
console.log("inside setter method");
this.name = val;
});
}
function accessorDescriptor(field, fun) {
var desc = { enumerable: true, configurable: true };
desc[field] = fun;
return desc;
}

function defineGetter(obj, prop, get) {

if (Object.defineProperty)
return Object.defineProperty(obj, prop, accessorDescriptor("get", get));
if (Object.prototype.__defineGetter__)
return obj.__defineGetter__(prop, get);

throw new Error("browser does not support getters");
}

function defineSetter(obj, prop, set) {

if (Object.defineProperty)
return Object.defineProperty(obj, prop, accessorDescriptor("set", set));
if (Object.prototype.__defineSetter__)
return obj.__defineSetter__(prop, set);

throw new Error("browser does not support setters");
}

function fun(){
var per = new Person("ABC");
console.log(per.Name);
per.Name = "XYZ";
console.log(per.Name);
}

</script>
</head>
<body>
<input type="button" value="click" onclick="fun()"/>
</body>
</html>

代码2:

http://jsfiddle.net/imrukhan/9H2U6/1/

引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Using_object_initializers

<!DOCTYPE HTML>

<html>
<head>
<script>
var Person = function(name) {
this._name = name;
};

Object.defineProperty(Person.prototype, "name", {
get: function() {
console.log("inside getter method");
return this._name;
},
set: function(val){
console.log("inside setter method");
this._name = val;
}
});

function fun(){
var per = new Person("ABC");
console.log(per.name);
per.name = "XYZ";
console.log(per.name);
}

</script>
</head>
<body>
<input type="button" value="click" onclick="fun()"/>
</body>
</html>

我的查询:
1) CODE1 和 CODE2 除了样式外,在功能上有什么区别吗?
2) 在 JavaScipt 中定义 Setter 和 Getter 的最佳方法是什么(CODE1/CODE2/请提出其他建议)?

感谢您的帮助。

最佳答案

您应该在代码中考虑的一件事是:

在 CODE1 中,Person 的每个实例都有自己的 getter 和 setter 方法。这意味着如果你创建 10 个人,你将有 20 个 getter 和 setter 方法。

而在 CODE2 中,它将只创建一个 getter 和一个 setter 方法,这些方法将由 Person 的所有实例共享。

因此,如果您要使用可以创建大量实例的 Web/应用程序,那么您绝对应该选择 CODE2。

关于javascript - Javascript 中 setter 和 getter 定义风格的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23693887/

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