15

有什么区别

Employee.prototype = Object.create(Person.prototype);

_.extend(Employee.prototype, Person.prototype);

两者都给出了相似的结果(输出),但是下划线方法似乎将 Person.prototype 添加到 Employee.constructor.prototype 中,并且到处都是额外的东西,为什么?

纯JS

在此处输入图像描述

下划线JS

在此处输入图像描述

一个很好的副作用_.extend是我可以轻松地进行多重继承:似乎它也不会使原型链更长......

_.extend(Employee.prototype, Person.prototype);
_.extend(Employee.prototype, {
    doSomething: function() {
        return "hi ...";
    }
});

但 ...

在此处输入图像描述

为什么有 2 个 sayHi 和 doSomething 函数?(实际上当我只做 1 扩展时它是一样的)。

http://jsfiddle.net/VMqSy/1/

4

1 回答 1

19

Employee.prototype = Object.create(Person.prototype);您一起完全取代Employee.prototype.

但是随着_.extend(Employee.prototype, Person.prototype);Person.prototypeEmployee.prototype.

例如,

var a = {var1:1, var2:2};
var b = {var2:4, var3:3};
console.log(_.extend(a, b)); // {var1:1, var2:4, var3:3}

如您所见,a它并没有被 完全取代,b它只是.b

于 2012-12-05T14:03:38.193 回答