首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用实例方法处理JS经典方法

问用实例方法处理JS经典方法
EN

Stack Overflow用户
提问于 2015-07-12 15:33:28
回答 3查看 71关注 0票数 2

我试图分析经典模型的流程,并测试不同的方法,如果它能奏效的话。首先,我实例化了ans1,然后我尝试将函数ans1.area分配给ans2,相信它会传递引用,但是当我试图在ans2中调用area()时,它没有工作- ans2.area(),它不是应该传递函数的引用吗?然而,当我将ans1分配给ans2并试图调用ans2.area()时,它与ans1具有相同的值。你能帮我解释一下吗。谢谢。

代码语言:javascript
复制
  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;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-12 15:44:23

这是因为ans2变量只是引用area函数,但缺少它的原始上下文( ans1变量引用的对象)。因此,函数中的this实际上是window (全局上下文),由于无效的值,您最终会得到NaN。

可以使用bind将函数绑定到原始上下文:

代码语言:javascript
复制
var ans2 = ans1.area.bind(ans1);

或

代码语言:javascript
复制
var ans2 = Rectangle.prototype.area.bind(ans1);

请参阅MDN

票数 3
EN

Stack Overflow用户

发布于 2015-07-12 15:44:24

当您执行var ans2 =ans1.rea;时,您已经为ans2分配了一个函数。因此,当您调用ans2.rea()时,this不引用Rect对象,它引用的是全局对象,它没有长度和宽度E 211属性。

有关在自定义对象中如何工作的简要说明,请参阅JavaScript

票数 1
EN

Stack Overflow用户

发布于 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

`

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31369484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档