Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在对象函数中定义getter/setter_Javascript_Oop_Setter_Getter - Fatal编程技术网

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

我正在学习JavaScript,想知道是否可以在对象函数中定义getter和setter。 主要区别在于调用它的方式,如果定义为
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'
As
get 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;}
,我在其中添加了一个getter
get:function(){returna;}
。但它抛出的
a未定义
。。。显然,
这个.a
也是未定义的。。。有什么想法吗?如果没有其他(函数/var)引用a,那么a将在函数执行后收集,您是否可以在JSFIDLE上创建一些代码片段来展示您想要实现的目标?我已经创建了一个,也许这就是您所期望的。非常感谢!问题是
Object.defineProperty
在构造函数之外,使用的是
constructorName.prototype
。如果它不能,那么构造函数中的
a
只对构造函数函数和其中定义的函数可见,因此您必须使用我在该JSFIDLE上发布的内容来访问它。