【发布时间】:2020-02-08 17:54:09
【问题描述】:
考虑下面的代码:
"use strict";
var obj = {
firstName : "abhay",
lastName : "Deol"
};
Object.defineProperty(obj, "fullName" , {
get fullName(){
return this.firstName + this.lastName;
},
set fullName(value){
let words = value.toString().split(' ');
this.firstName = words[0];
this.lastName = words[1];
},
enumerable : true,
configurable : true
});
console.log(Object.getOwnPropertyDescriptor(obj,"fullName"));
obj.fullName = "good boys"; // Error
我收到以下错误:
TypeError: Cannot assign to read only property 'fullName' of object '#<Object>'
at Object.<anonymous>
at Module._compile (internal/modules/cjs/loader.js:955:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
at Module.load (internal/modules/cjs/loader.js:811:32)
at Function.Module._load (internal/modules/cjs/loader.js:723:14)
at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
at internal/main/run_main_module.js:17:11
它似乎无法识别二传手。此外,如果我试图获得价值,它会给我undefined。这表明,吸气剂也没有得到认可。但为什么呢?
在上面的代码中,它将其识别为数据属性而不是访问器属性。显然,它在描述符对象中不接受 getter/setter 的语法。但为什么 ?这可以通过this的输出来证明-
console.log(Object.getOwnPropertyDescriptor(obj,"fullName"));
作为
{
value: undefined,
writable: false,
enumerable: true,
configurable: true
}
我在 getter/setter 代码中使用的语法,如果我在对象字面量中使用它就可以正常工作,那么为什么描述符对象会失败呢?我的意思是下面是可以接受的,但上面的代码语法不是!
var obj = {
firstName : "abhay",
lastName : "Deol",
get fullName(){
return this.firstName + this.lastName;
},
set fullName(value){
let words = value.toString().split(' ');
this.firstName = words[0];
this.lastName = words[1];
}
};
【问题讨论】:
标签: javascript