- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 JavaScript 时最令人困惑的事情之一是使用 this
var x = {
ele : 'test',
init : function(){
alert(this.ele);
}
}
但是,当处理多个对象,尤其是事件时,this
的上下文会发生变化,并且难以跟踪/理解。
因此,如果有人有更好的意见/指南/想法/更好的实践,请分享。另外我想知道使用 this
是否具有任何(性能)优势或什么?
最佳答案
这与性能无关,而是与访问对象特定实例的属性有关:-
x.init()
如果您未在函数中使用 this
,则不会显示“test”。
上面的行实际上与:-
x.init.call(x);
当函数执行时,call
使用中的第一个参数被赋值给this
。
现在考虑:-
var fn = x.init; //Note no () so the function itself is assigned to the variable fn
fn();
现在您在警报中什么也没有得到。这是因为上述内容实际上是:-
fn.call(window);
在浏览器托管的 Javascript 中,window
对象与全局对象同义。当“原始”调用函数时,this
默认为全局对象。
典型的错误是这样做:-
var x = {
ele: 'test';
init: function(elem) {
elem.onclick = function() { alert(this.ele); }
}
}
x.init(document.getElementById('myButton'));
但是这不起作用,因为浏览器使用以下代码调用附加到 onclick 事件的函数:-
onclick.call(theDOMElement)
因此,当函数运行时,this
并不是您想象的那样。
对于这种情况我通常的解决方案是:-
var x = {
ele: 'test';
init: function(elem) {
var self = this;
elem.onclick = function() { alert(self.ele); }
elem = null;
}
}
x.init(document.getElementById('myButton'));
请注意,elem = null
是 IE 内存泄漏的解决方法。
关于javascript - JavaScript 中 "this"的使用让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2148451/
我正在尝试学习Rust。我正在阅读一本书online,该书实现了unix程序cat。现在,我试图读取作为像cargo run file1.txt file2.txt这样的参数传递的文件的内容,但是程序
我在 GHC 8.0.1 中遇到了一个带有种类索引 (?) GADT 的奇怪情况,其中在类型与种类签名中引入 foralls 会产生不同的类型检查行为。 考虑以下数据类型: {-# LANGUAGE
我正在使用 Perl 5.10 开发应用程序,HTML::Mason和 Apache 2.2。这是我第一次在大型项目中使用 Perl 5.10。我每隔一段时间就会出现奇怪的行为。应用程序因一个非常奇怪
我正在尝试将文件上传到aws中的rust中,因为我使用的是 rusoto_s3 的s3 rust客户端,当这些部分从单个线程发送时,我设法使分段上传代码正常工作不是我想要的,我想上传大文件,并且希望能
我是一名优秀的程序员,十分优秀!