call只能改变this的指向,而使用new对象不仅会自动调用call方法改变这个对象的this指向,而且还会继承构造函数的原型。
var fn = function(a){ this.a = a; } fn.prototype = { draw:function(){ console.log(this.a); } } var obj = new fn(10); obj.draw(); //10
在obj在没有找到draw函数,所以它向它的原型链中查找。
简单版
var fn = function(a){ this.a = a; } var obj = new fn();
相当于这样
var fn = function(a){ this.a = a; } var obj = {}; 继承 obj.__proto__ = fn.prototype; 改变this指向 fn.call(obj);