问题描述
我正在学习JavaScript,并且想知道是否可以在对象函数中定义getter和setter。
主要区别在于调用它的方式,如果定义为getFullName = function()
,我应该将方法调用为myObj.getFullName()
,但是,对于数组,getter允许将其作为简单属性调用myObj.fullName
(不带括号)。
正如我在MDN参考( )中看到的,它可以在Object Literals中轻松完成:
var obj = {
get var(){
return "something";
}
}
但是,我无法在对象函数上这样做:
function obj(name, lname){
this.name = name;
this.lastName = lname;
get fullName(){
return this.name + " " + this.lastName;
}
}
获取“意外标识符”错误...
1楼
因为get XX(){}
用于var obj = {};
但是在这里你使用构造函数来创建新对象。
所以你应该使用 。
如果你想在从obj
创建的所有对象上应用fullName
,则将其应用于其原型。
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);
更新:如果你想要一个更直接的方式,而不是害怕尝试新事物,那么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);
目前大多数浏览器都不支持,如果你想在你的网站中使用它,你需要使用像这样的js编译器将它从ES2015转换为ES5。
Babel还为那些对ES2015感兴趣的人提供 ,您可以将上述代码复制到游乐场,看看它是如何工作的。
2楼
只需创建一个变量并为其分配函数。
function obj(name, lname){
this.name = name;
this.lastName = lname;
this.fullName = function(){
return this.name + " " + this.lastName;
};
}
如果您想了解更多有关它的信息,请尝试阅读有关内容。
此外,这个链接, ,正在解释你需要什么,这是向对象添加一个方法。 而吸气剂传统上只是一种方法。
3楼
function obj(name, lname){
this.name = name;
this.lastName = lname;
}
obj.prototype.getfullName = function(){
return this.name + " " + this.lastName;
}
用它作为
a = new obj("My","Name");
a.getfullName() //"My Name"
4楼
Javascript使用prototype
继承,其功能以function
关键字开头。
按照惯例,对象的第一个字符是大写的。
function Obj(name, lname){
this.name = name;
this.lastName = lname;
}
Obj.prototype.get = function() {
return this.name + " " + this.lastName;
}
var person = new Obj('luke', 'lim');
console.log(person.get()); // 'luke lim'