当前位置:  开发笔记 > 编程语言 > 正文

Javascript"this"范围根据调用的方式给出不同的结果

如何解决《Javascript"this"范围根据调用的方式给出不同的结果》经验,为你挑选了1个好方法。

所有,

这是代码:

var Person = function (name) {

  this.name = name;

  this.printName = function(){
    console.log("My name is " + this.name);
  }

};


var p = new Person("Steve");

var funcRef = p["printName"];

p.printName();//Works

p["printName"]();//Works
funcRef();//returns incorrect value

在这里找到一个有用的例子:http://plnkr.co/edit/57LS6oXPfqccAWf6uqQV?p = preview

我的问题是最后两个之间有什么区别?我以相同的方式访问对象方法,唯一的区别是它被调用的方式.

为什么会返回差异结果?

我第一次在javascript中遇到过这个问题.我知道这是在一个不同的范围,但我不知道它是如何与我想要了解的对象分离.

谢谢

史蒂夫



1> Magus..:

this当你直接在对象上调用函数时,javascript绑定关键字.

随着test.fn(),this将在test里面fn.与...相同test['fn']().但如果你这样做var fn = test.fn; fn(),this将成为全局根(window在浏览器中)fn.

你可以强制this内部这样的函数:var fn = test.fn.bind(test);

更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有