Javascript JS[ES5]如何使用setter和getter分配对象?

Javascript JS[ES5]如何使用setter和getter分配对象?,javascript,jquery,coffeescript,ecmascript-6,ecmascript-5,Javascript,Jquery,Coffeescript,Ecmascript 6,Ecmascript 5,使用使用strict时出现错误 我要组合多个对象: 使用jQuery.extend(): 使用ES6 Object.assign: new_obj = $.extend(true, objN, obj1) 在任何情况下,getter都会变成常规属性,因此可以对其进行更改。如何避免它?您可以编写自己的函数,该函数还可以复制属性属性: new_obj = Object.assign({}, objN, obj1) 但是请注意,对象有很好的理由。assign没有,如果getter和setter是闭

使用使用strict时出现错误

我要组合多个对象: 使用jQuery.extend():

使用ES6 Object.assign:

new_obj = $.extend(true, objN, obj1)

在任何情况下,getter都会变成常规属性,因此可以对其进行更改。如何避免它?

您可以编写自己的函数,该函数还可以复制属性属性:

new_obj = Object.assign({}, objN, obj1)

但是请注意,
对象有很好的理由。assign
没有,如果getter和setter是闭包,它可能会产生奇怪的效果。

在您的示例中没有setter和getter,您只是得到了一个不可写的属性?是的,这是一个简单的示例。但是setter和getter是一样的。您的问题是否与在使用“use strict”指令时修复错误有关?如果是这样,请将变量赋值更改为使用关键字,例如
var
let
。不适用于proto.$中的属性。扩展更好示例对象的原型中没有属性。如果您还想复制所有这些,那么也要迭代源代码的原型链。顺便说一句,
Object.assign
也不考虑继承的属性。应该用
for(const key in source)
替换
for(let key of Object.keys(source))
,并添加一个
if(source!=null)
检查,以避免错误并遵守标准的
assign
方法。除此之外+1
new_obj = Object.assign({}, objN, obj1)
function extend(target, ...sources) {
    for (let source of sources)
        for (let key of Object.keys(source))
            Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
    return target;
}