4
var Vehicle = function Vehicle() {
 // ...
}

var vehicle = new Vehicle();

当 new Vehicle() 被调用时,JavaScript 做了四件事:

  1. 它创建一个新对象。
  2. 它将对象的构造函数属性设置为 Vehicle。
  3. 它设置对象以委托给 Vehicle.prototype。
  4. 它在新对象的上下文中调用 Vehicle()。

第三点说明了什么?这是否意味着新的对象构造函数原型设置为function.prototype?代表在这里是什么意思?

4

3 回答 3

2

代表着:

vehicle.constructor.prototype === Vehicle.prototype; // true

因此,可用的方法Vehicle.prototype将可用于vehicle对象。

于 2013-01-29T09:11:26.413 回答
1

您只需将delegate视为reference,每个对象都有一个[[Prototype]]内部属性,并且它引用其构造函数的 prorotype,因此:

Object.getPrototypeOf(vehicle) === Vehicle.prototype; // always true

这是关于操作员在做什么的伪代码new

function fakeNew(constructor) {
    var instance = {};
    instance.__proto__ = constructor.prototype;
    instance.constructor = constructor;
    constructor.apply(instance, [].slice.call(arguments, 1));
    return instance;
}
于 2013-01-29T09:12:44.480 回答
0
var Vehicle = function Vehicle() {
    this.engine = {running:false};
}
Vehicle.prototype.startEngine = function () {
    this.engine.running = true;
};

var vehicle1 = new Vehicle();
vehicle.startEngine();
// vehicle.engine.running === true
var vehicle2 = new Vehicle();
vehicle2.startEngine = function () {
    throw "err";
};
vehicle2.startEngine();
// Error: "err"

Javascript 是基于原型的,因此每个对象都继承自另一个对象(原型)。当你在一个对象上调用一个属性时,它首先在它自己的范围内搜索该属性,如果找不到,就在属性链中向上。

于 2013-01-29T09:20:47.127 回答