コード例を考えるとthis
、その呼び出しのの値はオブジェクトfunction1
の値に設定されます。function2.prototype
var function1 = function(){
console.log(this === function2.prototype); // true
};
var function2 = function(){};
function1.call(function2.prototype);
したがって、上のメソッド(または他の値)は内部function2.prototype
からアクセスできます。this
function1
しかし、それらが単に次のように呼び出された場合:
this.someMethod();
this
その場合、メソッド内の値は実際のプロトタイプオブジェクトになります。これは珍しい使用法です。
リンクのコード例は次のようです。
var asCircle = function() {
this.area = function() {
return Math.PI * this.radius * this.radius;
};
this.grow = function() {
this.radius++;
};
this.shrink = function() {
this.radius--;
};
return this;
};
var Circle = function(radius) {
this.radius = radius;
};
asCircle.call(Circle.prototype);
var circle1 = new Circle(5);
circle1.area(); //78.54
この例では、asCircle
関数は値として提供されているものにメソッドを追加しthis
ます。したがって、基本的に、Circle.prototype
この呼び出しの結果として、追加のメソッドで拡張されています。
ご覧のとおり、このメソッドは、その呼び出しによって割り当てられた後.area()
のプロトタイプチェーンで使用できるようになります。Circle
つまり、呼び出されている関数がメソッドを使用しているのではなく、その逆です...新しいメソッドを提供しています。