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

var vehicle = new Vehicle();

new Vehicle() が呼び出されると、JavaScript は次の 4 つのことを行います。

  1. 新しいオブジェクトを作成します。
  2. オブジェクトのコンストラクター プロパティを Vehicle に設定します。
  3. Vehicle.prototype に委譲するオブジェクトを設定します。
  4. 新しいオブジェクトのコンテキストで Vehicle() を呼び出します。

その 3 番目のポイントは何を語っているのでしょうか。新しいオブジェクト コンストラクター プロトタイプが function.prototype に設定されているということですか? ここでのデリゲートとはどういう意味ですか?

4

3 に答える 3

2

だということだ:

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

したがって、で使用可能なメソッドVehicle.prototypevehicleオブジェクトで使用できます。

于 2013-01-29T09:11:26.413 に答える
1

delegatereferenceと見なすだけで、すべてのオブジェクトには[[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 に答える