Jo *_*ina 4 javascript oop getter setter
我正在学习JavaScript,并且想知道是否可以在对象函数中定义getter和setter.主要区别在于调用它的方式,如果定义为getFullName = function(),我应该调用该方法myObj.getFullName(),但是,对于数组,getter允许将其作为简单属性调用myObj.fullName(不带括号).
正如我在MDN参考(http://mzl.la/1CIUuIw)中看到的,它可以在Object Literals中轻松完成:
var obj = {
get var(){
return "something";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法在对象函数上这样做:
function obj(name, lname){
this.name = name;
this.lastName = lname;
get fullName(){
return this.name + " " + this.lastName;
}
}
Run Code Online (Sandbox Code Playgroud)
获取"意外标识符"错误...
fuy*_*oya 10
正如get XX(){}用于var obj = {};但在这里你使用构造函数来创建新对象.所以你应该使用MDN - Object.defineProperty().
如果你想fullName在所有对象上创建obj应用,请将其应用于其原型.
function obj(name, lname){
this.name = name;
this.lastName = lname;
}
Object.defineProperty(obj.prototype, 'fullName', {
get : function() {
return this.name + " " + this.lastName;
}
});
var aObj = new obj("first", 'lastN');
console.log(aObj.fullName);Run Code Online (Sandbox Code Playgroud)
更新:如果你想要一个更直接的方式,而不是害怕尝试新事物,那么ES2015类标记可以更容易地做到:
// ES2015 - class
class obj {
constructor(name, lname) {
this.name = name;
this.lname = lname;
}
// Define getter method for fullName
get fullName() {
return this.name + " " + this.lastName;
}
}
var aObj = new obj('Billy', 'Hallow');
console.log(aObj.fullName);
Run Code Online (Sandbox Code Playgroud)
目前大多数浏览器都不支持,如果你想在你的网站中使用它,你需要使用像Babel这样的js编译器将它从ES2015转换为ES5.
Babel还为那些对ES2015感兴趣的人提供游乐场,您可以将上述代码复制到游乐场,看看它是如何工作的.
| 归档时间: |
|
| 查看次数: |
1923 次 |
| 最近记录: |