我试图分析经典模型的流程,并测试不同的方法,如果它能奏效的话。首先,我实例化了ans1,然后我尝试将函数ans1.area分配给ans2,相信它会传递引用,但是当我试图在ans2中调用area()时,它没有工作- ans2.area(),它不是应该传递函数的引用吗?然而,当我将ans1分配给ans2并试图调用ans2.area()时,它与ans1具有相同的值。你能帮我解释一下吗。谢谢。
function Rectangle(length,width){
this.length = length;
this.width = width;
}
Rectangle.prototype.perimeter= function(){
var perimeterAns = this.length + this.length + this.width + this.width;
return perimeterAns;
};
Rectangle.prototype.area= function(){
var areaAns = (2*this.length + 2*this.width);
return areaAns;
};
var ans1 = new Rectangle(5,6);
ans1.area(); // 22
// not working
var ans2 = ans1.area
ans2(); // Nan
ans2 = ans1;
ans2.area(); // 22;发布于 2015-07-12 15:44:23
这是因为ans2变量只是引用area函数,但缺少它的原始上下文( ans1变量引用的对象)。因此,函数中的this实际上是window (全局上下文),由于无效的值,您最终会得到NaN。
可以使用bind将函数绑定到原始上下文:
var ans2 = ans1.area.bind(ans1);或
var ans2 = Rectangle.prototype.area.bind(ans1);请参阅MDN
发布于 2015-07-12 15:44:24
当您执行var ans2 =ans1.rea;时,您已经为ans2分配了一个函数。因此,当您调用ans2.rea()时,this不引用Rect对象,它引用的是全局对象,它没有长度和宽度E 211属性。
有关在自定义对象中如何工作的简要说明,请参阅JavaScript
发布于 2015-07-12 15:50:44
正如您在function area中看到的,请使用访问length和width变量的方式(使用this) --这意味着从要执行操作的对象访问length and width变量。
现在来看你的第一个问题,请看我的答案--内联// not working var ans2 = ans1.area // Copy the function area to a variable ans2(); // Nan // here when you call the function, this object points to //global object where length and width is undefined
第二个问题,找到我的答案--内联ans2 = ans1; ans2.area(); // 22;object assigns by reference, so when you call the function on second copy object then it like calling on the same object, thats why the same answer
`
https://stackoverflow.com/questions/31369484
复制相似问题