Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.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 Object.assign构造函数中的getter和setter_Javascript - Fatal编程技术网

Javascript Object.assign构造函数中的getter和setter

Javascript Object.assign构造函数中的getter和setter,javascript,Javascript,我试图通过对象在构造函数中定义getter和setter。assign: function Class() { Object.assign(this, { get prop() { console.log('call get') }, set prop(v) { console.log('call set') }, }); } var c = new Class(); // (1) => 'call get' console.log(c.prop); // (2)

我试图通过
对象在构造函数中定义getter和setter。assign

function Class() {
  Object.assign(this, {
    get prop() { console.log('call get') },
    set prop(v) { console.log('call set') },
  });
}

var c = new Class(); // (1) => 'call get'
console.log(c.prop); // (2) => undefined
c.prop = 'change';
console.log(c.prop); // (3) => 'change' 
问题:

(1) 为什么叫盖特

(2) 为什么不叫getter


(3) 为什么忽略setter?

您所有三个问题的答案都是相同的:
对象。赋值从源对象读取属性的值,它不会复制getter/setter

如果查看属性描述符,可以看到:

var源={
获取prop(){},
集合属性(v){}
};
log(“源上的描述符”,Object.getOwnPropertyDescriptor(源,“prop”));
var target=Object.assign({},source);

log(“目标上的描述符”,Object.getOwnPropertyDescriptor(目标,“prop”))反转它们works@wmik-不是这样:如果这样做,结果对象将不是类的实例,而是作为第一个参数传递给
对象的原始对象。assign