Javascript 在对象函数中定义getter/setter
我正在学习JavaScript,想知道是否可以在对象函数中定义getter和setter。 主要区别在于调用它的方式,如果定义为Javascript 在对象函数中定义getter/setter,javascript,oop,setter,getter,Javascript,Oop,Setter,Getter,我正在学习JavaScript,想知道是否可以在对象函数中定义getter和setter。 主要区别在于调用它的方式,如果定义为getFullName=function(),我应该将该方法调用为myObj.getFullName(),但是,对于数组,getter允许将其作为简单属性myObj.fullName(不带括号)调用 正如我在MDN reference()中所看到的,它很容易在对象文本中完成: var obj = { get var(){ return "some
getFullName=function()
,我应该将该方法调用为myObj.getFullName()
,但是,对于数组,getter允许将其作为简单属性myObj.fullName
(不带括号)调用
正如我在MDN reference()中所看到的,它很容易在对象文本中完成:
var obj = {
get var(){
return "something";
}
}
但是,我不能在对象函数上这样做:
function obj(name, lname){
this.name = name;
this.lastName = lname;
get fullName(){
return this.name + " " + this.lastName;
}
}
获取“意外标识符”错误…只需创建一个变量并将函数分配给它即可
function obj(name, lname){
this.name = name;
this.lastName = lname;
this.fullName = function(){
return this.name + " " + this.lastName;
};
}
如果你想了解更多,试着读一些关于它的东西
此外,此链接正解释您需要什么,即向对象添加方法。而getter传统上只是一种方法
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"
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'
Asget XX(){}
用于var obj={}代码>但这里使用构造函数创建新对象。所以你应该使用
如果您希望fullName
应用于从obj
创建的所有对象,请将其应用于其原型
函数obj(名称,lname){
this.name=名称;
this.lastName=lname;
}
Object.defineProperty(obj.prototype,“全名”{
get:function(){
返回this.name+“”+this.lastName;
}
});
var aObj=新对象(“第一个”,“最后一个”);
console.log(aObj.fullName)
post你看到这个引用的地方,因为这在我看来是错误的getter
和method
之间的区别在于调用它时,你不需要括号,这就像数组的length
。我只是想知道是否有可能。据我所知,在Javascript中没有像get这样的标识符,所以我想这就是你的错误的来源。在Javascript中,您可以使用闭包或嵌套函数。我向您展示了闭包,它是一种Javascript方法。你的例子就在那里!我理解这个评论,但是请检查问题中的参考链接。JavaScript接受getter和setter作为函数,使它们能够作为属性而不是方法调用。您也可以从中检查已接受的答案@fuyushimoya@JoColina是的,但话说回来,完全一样。fuyushimoya方法的缺点是语法更复杂。事实上,闭包的结果是一样的。我只是想知道为什么我不能向构造函数添加getter。谢谢!您好@fuyushimoya,我想知道您是否知道如何使getter和setter与私有变量交互。例如,我有一个构造函数:functionperson(){var a=0;}
,我在其中添加了一个getterget:function(){returna;}
。但它抛出的a未定义
。。。显然,这个.a
也是未定义的。。。有什么想法吗?如果没有其他(函数/var)引用a,那么a将在函数执行后收集,您是否可以在JSFIDLE上创建一些代码片段来展示您想要实现的目标?我已经创建了一个,也许这就是您所期望的。非常感谢!问题是Object.defineProperty
在构造函数之外,使用的是constructorName.prototype
。如果它不能,那么构造函数中的a
只对构造函数函数和其中定义的函数可见,因此您必须使用我在该JSFIDLE上发布的内容来访问它。