JavaScript- this value
JavaScript- this value
我在jqplot库中看到了这样的代码:
$.jqplot.Dragable = function(options) {
// a bunch of code here.
$.extend(true, this, options);
};
这是一个向库中添加新插件的例程。
$.extend(true, this, options)
中this
指的是什么?它是函数本身还是窗口,还是只在调用时指定?
谢谢!
更新:
这个问题本来是一个一般的问题,因为我不理解js中的this
值。经过一番研究,显然:
1. 如果使用func()调用,那么this
将是window
或undefined
(严格模式)
2. 如果像foo.funct()一样调用,this
将指向foo。
对于这个特定的jqplot库,当它被调用时,它实际上是在$.jqplot
上调用的,其中jqplot被添加到jquery中。所以this
应该是指$.jqplot
在您的示例中,$.jqplot.Dragable
是一个构造函数。this
是指
new $.jqplot.Dragable(options)
。至于$.extend
,它只是将options
的每个方法和属性复制到this
。
但没关系。首先,您应该了解this
是什么。之后,你可以阅读我在我的答案底部发布的链接,了解JavaScript中的构造函数和OOP。
在javascript中,this
指的是方法或函数的上下文。this
有三种取值:
当简单地通过名称或直接变量引用(不是对象属性)执行函数时,this
指向全局作用域。在浏览器中,这是window
对象。
注意在严格模式下this
是undefined
function setFoo(val) {
this.foo = val;
}
上面我们有一个函数setFoo
。该函数简单地接受一个值并将其设置在this
上。让我们执行这个函数看看会发生什么…
setFoo(10);
在本例中,this
指的是全局作用域。因此,window.foo
或foo
应该等于10。
window.foo == 10 //true
foo == 10 //true
对象上下文
当一个函数作为对象的属性存储时,它被称为方法。当一个方法被执行时,this
成为该方法所附加的对象。这允许方法修改和使用对象上的数据。
现在让我们取setFoo并将它附加到一个对象。
var myObject = {};
myObject.setFoo = setFoo;
如果我们执行与现在myObject将有一个新的名为foo的属性,它将等于任何我们传递给myObject.setFoo
。
myObject.setFoo(34);
myObject.foo
= 34,因为this
指的是对象myObject
。
myObject.foo == 34; //true
调用上下文最后一种设置this
的方法是使用Function
原型的方法。这意味着JavaScript中的所有函数和方法都有这些to方法。它们是call
和apply
。这些函数允许程序员在执行函数或方法时设置自定义上下文。这两个函数几乎完全相同,只是apply的第二个参数是一个数组。数组中的每一项都按顺序作为参数传递给函数/方法。
var x = {};
setFoo.call(x, 20);
x.foo == 20; // true
应用var x = {};
var args = [20];
setFoo.apply(x, args);
x.foo == 20; // true
你应该在MDN上阅读this
的文章。它将帮助您更好地理解何时使用它,以及为什么它是函数作用域的重要组成部分。
MDN - this
你也应该阅读,因为this
的主要目的是在JavaScript中启用OOP(面向对象编程)。
MDN -继承和原型链
- 将php值传递给点击(getFunction(this.value))问题
- Javascript:this.value 函数不起作用
- Javascript onchange(this.value,this.value)在ipad上不起作用
- this.value在<td>标记显示未定义
- 从javascript insertCell HTML输入标记传递this.value
- 为什么我需要将“var value = val;”更改为“this.value = val;”,这样我就不会收到“未定义
- JQuery 将输入框值设置为 this.value onclick
- this.value 在从 onchange 事件调用函数时显示为 undefind
- 将 this.value 传递给 JS 中的函数,然后更改该值
- 流星:如何使用模板事件检索“{{this}}-value”
- javascript this.value没有'不起作用
- this.value 返回带有值的括号
- AngularJS-将this.value传递到函数中
- 什么是'this.value'经典ASP Javascript参考中的平均值
- onkeyup="this.value = this.value.replace(/,/g,'.
- HTML表单,onclick="this.disabled=true;this.value='发送中,
- JavaScript- this value
- React-bootstrap表单只允许我在value设置为this.state.value时输入
- 在requestAnimationFrame中设置正确的this-value
- 未捕获类型错误:不能使用'in'操作符“;使用value $(this)