相关疑难解决方法(0)

对象传播与Object.assign

假设我有一个options变量,我想设置一些默认值.

这两种选择的好处/缺点是什么?

使用对象传播

options = {...optionsDefault, ...options};
Run Code Online (Sandbox Code Playgroud)

或者使用Object.assign

options = Object.assign({}, optionsDefault, options);
Run Code Online (Sandbox Code Playgroud)

这是让我惊讶的提交.

javascript ecmascript-6

343
推荐指数
9
解决办法
14万
查看次数

Crockford的Prototypal继承 - 嵌套对象的问题

我一直在阅读道格拉斯·克罗克福德的"Javascript:The Good Parts" - 虽然它有点极端,但我已经接受了很多他要说的话.

在第3章中,他讨论了对象,并且在某一点上列出了一种模式(也在这里找到),用于简化和避免使用内置"new"关键字时出现的一些混淆/问题.

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}
newObject = Object.create(oldObject);
Run Code Online (Sandbox Code Playgroud)

所以我尝试在我正在处理的项目中使用它,并且在尝试从嵌套的对象继承时发现了一个问题.如果我覆盖使用此模式继承的嵌套对象的值,它将覆盖原型链上的嵌套元素.

Crockford的例子就像flatObj下面的例子一样,效果很好.但是,该行为与嵌套对象不一致:

var flatObj = {
    firstname: "John",
    lastname: "Doe",
    age: 23
}
var person1 = Object.create(flatObj);

var nestObj = {
    sex: "female",
    info: {
        firstname: "Jane",
        lastname: "Dough",
        age: 32  
    }
}
var person2 = Object.create(nestObj);

var nestObj2 = {
    sex: "male",
    info: { …
Run Code Online (Sandbox Code Playgroud)

javascript prototypal-inheritance

13
推荐指数
1
解决办法
1654
查看次数