Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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
如何使用object.defineproperty在javascript中定义getter和setter_Javascript_Html_Defineproperty - Fatal编程技术网

如何使用object.defineproperty在javascript中定义getter和setter

如何使用object.defineproperty在javascript中定义getter和setter,javascript,html,defineproperty,Javascript,Html,Defineproperty,我一直在尝试使用object.defineproperty编写getter和setter,但未能完成。我一直在尝试此示例,但由于未定义firstName属性,它引发了一个错误。是否有人可以帮助我解决此问题 职能人员(fName,lName){ Object.defineProperty(这是“firstName”{ get:function(){return firstName;}, set:function(newValue){firstName=newValue;} }); } 变量p1=

我一直在尝试使用object.defineproperty编写getter和setter,但未能完成。我一直在尝试此示例,但由于未定义firstName属性,它引发了一个错误。是否有人可以帮助我解决此问题

职能人员(fName,lName){
Object.defineProperty(这是“firstName”{
get:function(){return firstName;},
set:function(newValue){firstName=newValue;}
});
}
变量p1=人(“xyz”、“abc”);

console.log(p1.firstName)您需要保存对传递到构造函数中的参数的引用,以便在实例化后获取/设置它们

function person(fName, lName) {    
  Object.defineProperty(this, 'firstName', {
    get: function () { return this._firstName; },
    set: function (newValue) { this._firstName = newValue; }
  });

  Object.defineProperty(this, 'lastName', {
    get: function () { return this._lastName; },
    set: function (newValue) { this._lastName = newValue; }
  });

  this.firstName = fName;
  this.lastName = lName;
}

var p1 = new person("xyz", "abc");
console.log(p1.firstName);

您需要保存对传递到构造函数中的参数的引用,以便在实例化后获取/设置它们

function person(fName, lName) {    
  Object.defineProperty(this, 'firstName', {
    get: function () { return this._firstName; },
    set: function (newValue) { this._firstName = newValue; }
  });

  Object.defineProperty(this, 'lastName', {
    get: function () { return this._lastName; },
    set: function (newValue) { this._lastName = newValue; }
  });

  this.firstName = fName;
  this.lastName = lName;
}

var p1 = new person("xyz", "abc");
console.log(p1.firstName);

在getter中,您返回的是
firstName
,但它尚未定义,因此就在
对象的正上方。定义属性
声明
firstName
并为其指定
fName
参数

此外,当您声明p1时,请使用
new
运算符,以便您的
人员
构造函数工作并将
xyz
分配给
firstName
属性

那么,试试这个:

职能人员(fName,lName){
var firstName=fName;
Object.defineProperty(这是“firstName”{
get:function(){return firstName;},
set:function(newValue){firstName=newValue;}
});
}
风险值p1=新人(“xyz”、“abc”);
console.log(p1.firstName);
p1.firstName=“abc”;

console.log(p1.firstName)
在getter中,您返回的是
firstName
,但它还没有定义,所以就在
对象的正上方。defineProperty
声明
firstName
并将
fName
参数指定给它

此外,当您声明p1时,请使用
new
运算符,以便您的
人员
构造函数工作并将
xyz
分配给
firstName
属性

那么,试试这个:

职能人员(fName,lName){
var firstName=fName;
Object.defineProperty(这是“firstName”{
get:function(){return firstName;},
set:function(newValue){firstName=newValue;}
});
}
风险值p1=新人(“xyz”、“abc”);
console.log(p1.firstName);
p1.firstName=“abc”;

console.log(p1.firstName)
您应该
new
启动您的
Person
来创建Person实例。 如您所见,您可以简单地使用传递到getter和setter的构造函数中的变量。
我特意命名了构造函数参数,以查看所有变量如何协同工作

在getter中,返回firstNameFromConstructor变量,或者进行一些处理,然后返回它。
在setter中,可以更改firstNameFromConstructor变量的值

函数人(firstNameFromConstructor,lastNameFromConstructor){
Object.defineProperty(这是“firstName”{
get:function(){return firstNameFromConstructor;},
set:function(newFirstName){firstNameFromConstructor=newFirstName;}
});
Object.defineProperty(此“lastName”{
get:function(){return lastNameFromConstructor;},
set:function(newLastName){lastNameFromConstructor=newLastName;}
});
}
风险值p1=新人(“xyz”、“abc”);
console.log(p1.firstName);
p1.firstName='zyx'

console.log(p1.firstName)
您应该
new
启动您的
Person
来创建Person实例。 如您所见,您可以简单地使用传递到getter和setter的构造函数中的变量。
我特意命名了构造函数参数,以查看所有变量如何协同工作

在getter中,返回firstNameFromConstructor变量,或者进行一些处理,然后返回它。
在setter中,可以更改firstNameFromConstructor变量的值

函数人(firstNameFromConstructor,lastNameFromConstructor){
Object.defineProperty(这是“firstName”{
get:function(){return firstNameFromConstructor;},
set:function(newFirstName){firstNameFromConstructor=newFirstName;}
});
Object.defineProperty(此“lastName”{
get:function(){return lastNameFromConstructor;},
set:function(newLastName){lastNameFromConstructor=newLastName;}
});
}
风险值p1=新人(“xyz”、“abc”);
console.log(p1.firstName);
p1.firstName='zyx'

console.log(p1.firstName)这仅适用于setter。如果单独使用,getter不需要它。这只适用于setter。如果单独使用,getter不需要这个。在哪里使用
fName
lName
?嗯,你没有。您希望如何在不传递值的情况下传递值?;-)我的想法是在person对象中创建一个firstName属性,该属性应该具有fName值。我找不到一种方法来解决这个问题,错误很明显。您没有在任何地方定义
firstName
变量,因此
返回firstName
抛出,并且
firstName=newValue
以草率模式创建全局属性,并以严格模式抛出。您在何处使用
fName
lName
?嗯,你没有。您希望如何在不传递值的情况下传递值?;-)我的想法是在person对象中创建一个firstName属性,该属性应该具有fName值。我找不到一种方法来解决这个问题,错误很明显。您没有在任何地方定义
firstName
变量,因此
return firstName
抛出,并且
firstName=newValue
在sloppy模式下创建全局属性,并在strict模式下抛出。这基于。这基于。