这个JavaScript Function.call方法在做什么
What is this JavaScript Function.call method doing?
var function1 = function(){};
var function2 = function(){};
function1.call(function2.prototype);
我花了太多时间试图理解上面的代码。有人能解释一下function1
和function2
在上述情况下是如何变化的吗?
功能性混合物
我能够在function2
的对象上调用function1
中的方法。所以,我的结论是function
一定已经改变了。
给定您的代码示例,function1
调用中this
的值将设置为function2.prototype
对象的值。
var function1 = function(){
console.log(this === function2.prototype); // true
};
var function2 = function(){};
function1.call(function2.prototype);
因此,function2.prototype
上的方法(或其他值(将可以从function1
内的this
访问。
但如果它们被简单地调用如下:
this.someMethod();
则方法内部的CCD_ 12的值将是实际的原型对象。这将是一个不同寻常的用途。
你的链接中的代码示例似乎是这样的:
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
的原型链中通过该调用进行分配后变得可用。
因此,被调用的函数并不是在使用这些方法,而是恰恰相反。。。它提供了新的方法。
它们不是。您的代码正在使用function2的原型作为上下文来调用function1。因此,在调用中,"this"将映射到function2的原型,而不是窗口对象(假设您是从浏览器调用它(
相关文章:
- 有没有什么方法可以停止Jquery中的animate(也可以停止完整的回调函数)
- 有什么方法可以在下一个元素上进行追加吗
- 有什么方法可以调用外部URI方案吗
- 有没有什么方法可以通过输入字段(type=file)来找出选择了多少个文件
- JavaScript意外的令牌<,有什么方法可以逃避错误(或至少跳过那些无用的字符)
- 有什么方法可以在HTML页面中显示HTML代码吗
- 有什么方法可以防止Javascript gc尽可能少地运行
- Javascript应该使用什么方法来查找或检查数组中是否存在字符串
- 有什么方法可以使用类似<的函数吗;?php包含>在phonegap中
- 有什么方法可以获得或计算ScrollView的速度吗
- 有什么方法可以使页面无法刷新吗
- 在Windows8(HTML/JS)中,有什么方法可以区分触摸和鼠标交互吗
- 有没有什么方法可以将速度模板与backbone.js集成
- 在这种情况下,有什么方法可以向`.call()`发送更多的参数吗
- JSXGraph 中有什么方法可以使图像不透明
- 有没有什么方法可以测试用户是否在WindowsXP上
- 有什么方法可以在超级测试中设置默认值吗
- 当垃圾回收发生时,有什么方法可以得到通知吗
- 一个网站有什么方法可以区分微软边缘和谷歌Chrome吗;的渲染引擎
- 在 nodejs 中有什么方法可以打印 JSON 格式的 log4js 输出