什么是'这'意思是javascript函数内部
What does 'this' mean inside javascript function?
我正在调用以下第三方JavaScript函数:
var Socket = function(url) {
sockets.push(this);
var me = this;
me.readyState = 0;
window.setTimeout(function() {
me.readyState = 1;
me.onopen();
}, 500);
};
通过这个:
connection = new Socket(socketURL);
现在,我想一劳永逸地理解在函数中引用this
意味着什么。它和Java中的一样吗。例如,我指的是我自己,还是在JavaScript的情况下指的是函数所在的命名空间?
this
的引用取决于调用函数的方式。
例如:
function globalFn() { return this.val; }
var objectA = { val: 1, localFn: globalFn };
var objectB = { val: 2, localFn: globalFn };
objectA.localFn(); // `this` will be `objectA`, so it returns `1`.
objectB.localFn(); // `this` will be `objectB`, so it returns `2`.
到目前为止,一切都很好。它看起来和Java或其他面向对象语言中的一样。但是,这似乎很棘手:
var myFn = objectA.localFn;
myFn(); // `this` will be `undefined` in strict mode, causing an error
这表明this
引用并没有绑定到函数本身,而是绑定到函数的调用方式。您可以使用函数对象的call
方法"欺骗"它:
myFn.call(objectA); // `this` will be `objectA`, returns `1`.
globalFn.call(objectB); // `this` will be `objectB`, returns `2`.
objectA.localFn.call(objectB); // `this` will be `objectB`, returns `2`.
您甚至可以对没有定义为属性的函数的对象执行此操作:
var objectC = {val: 3};
myFn.call(objectC); // `this` will be `objectC` and will return `3`.
起初很难理解,有一个很棒的视频展示了它在YouTube上的工作原理:James Shore的《面向对象JavaScript的最终指南》。
已编辑。以前的答案不正确。这里有一个很好的解释:
code.tutsplus.com/tutorials/fully-understanding-the-codethis-code-keyword--net-21117
相关文章:
- 调用函数内部的函数
- javascript函数内部的代码用逗号而不是分号分隔
- javascript无法重新定义函数内部的全局对象
- 如何从函数内部的这个变量中获取值
- appendChild在函数外部工作,但在函数内部不工作
- 在jquery函数内部设置来自jquery函数的var;t运行
- 一个'var'在函数内部声明
- 为什么(如何)'这'从函数内部调用回调时发生更改
- 函数内部未定义的输入值
- 在Meteor中如何将数据从函数内部复制到其他模板
- 如果在构造函数内部为else,则Javascript是可选的
- 我对“;返回true"嵌套函数内部;t工作
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- javascript,将参数传递给函数内部的闭包中的回调
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 使用PHP和Javascript在函数内部传递alphaneumeric值作为参数时出错
- 访问函数内部的Polymer方法
- 更改函数内部的全局变量而不调用它
- 如何在函数内部为jquery工具提示调用不同的var字符串
- 构造函数内部的事件处理