什么区别
Employee.prototype = Object.create(Person.prototype);
Run Code Online (Sandbox Code Playgroud)
和
_.extend(Employee.prototype, Person.prototype);
Run Code Online (Sandbox Code Playgroud)
两者都给出了类似的结果(输出),但是下划线方法似乎将Person.prototype添加到Employee.constructor.prototype中,并且在这里和那里都有很多额外的东西,为什么呢?
纯JS

underscoreJS

一个很好的副作用_.extend是我可以很容易地做多重继承:看起来它不会使原型链更长...
_.extend(Employee.prototype, Person.prototype);
_.extend(Employee.prototype, {
doSomething: function() {
return "hi ...";
}
});
Run Code Online (Sandbox Code Playgroud)
但......

为什么有2个sayHi和doSomething函数?(实际上,当我只做1次延伸时它是一样的).
小智 19
随着Employee.prototype = Object.create(Person.prototype);你完全取代了Employee.prototype.
但随着_.extend(Employee.prototype, Person.prototype);你的加入Person.prototype,最重要的是Employee.prototype.
例如,
var a = {var1:1, var2:2};
var b = {var2:4, var3:3};
console.log(_.extend(a, b)); // {var1:1, var2:4, var3:3}
Run Code Online (Sandbox Code Playgroud)
如你所见,a它并没有完全被b它取代,它只是被定义的属性扩展了b.
| 归档时间: |
|
| 查看次数: |
11029 次 |
| 最近记录: |