var function1 = function(){};
var function2 = function(){};
function1.call(function2.prototype);
我花了太多时间试图理解上面的代码。任何人都可以解释上述案例中function1
和function2
的变化情况吗?
我可以在function1
的对象上调用function2
中的方法。所以,我的结论是function
必须改变。
答案 0 :(得分:5)
根据您的代码示例,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
方法在通过该调用分配后的{{1}}原型链中可用。
因此,调用的函数不是使用方法,而是相反......它提供了新的方法。
答案 1 :(得分:2)