Fra*_*ali 51 javascript function this
我的问题是:
function Foo()
{
this.foo = "bar"; // <- What is "this" here?
}
Run Code Online (Sandbox Code Playgroud)
从我可以告诉它取决于如何Foo使用,即作为构造函数或函数.什么可以this在不同的情况下?
Atl*_*tli 64
的this关键字是指功能所属的对象,或window对象如果函数不属于任何对象.
它在OOP代码中使用,用于引用函数所属的类/对象.例如:
function foo() {
this.value = 'Hello, world';
this.bar = function() {
alert(this.value);
}
}
var inst = new foo();
inst.bar();
Run Code Online (Sandbox Code Playgroud)
这个提醒: Hello, world
您可以this使用apply()或call()函数来操纵哪个对象引用.(有时非常方便)
var bar1 = new function() {
this.value = '#1';
}
var bar2 = new function() {
this.value = '#2';
}
function foo() {
alert(this.value);
}
foo.call(bar1); // Output: #1
foo.apply(bar2, []); // Output: #2
Run Code Online (Sandbox Code Playgroud)
Zor*_*art 24
阅读道格拉斯·克罗克福德(Douglas Crockford)对此事的评论,引用他对"JavaScript编程语言调查"的看法:
函数是一个对象.它可以像其他对象一样包含成员.这允许函数包含自己的数据表.它还允许对象充当类,包含构造函数和一组相关方法.
函数可以是对象的成员.当函数是对象的成员时,它被称为方法.有一个特殊变量,称为this,在调用对象的方法时设置为对象.
例如,在表达式foo.bar()中,this变量被设置为对象foo,作为函数栏的一种额外参数.然后,功能栏可以参考此来访问感兴趣的对象.
在像do.re.mi.fa()这样的更深层的表达式中,this变量设置为对象do.re.mi,而不是对象do.在一个简单的函数调用中,这被设置为全局对象(aka窗口),这不是很有用.正确的行为应该是保留当前的值,特别是在调用内部函数时.
"this"也可以根据你的函数调用方式而改变,读取apply函数和调用函数.
我建议你花时间学习JavaScript(自由)演示文稿中的一个JavaScript最伟大的思想,从这里链接起来.
在JavaScript中,约定(这只是一种约定)是任何以大写字母开头的函数都将用作构造函数.然后,人们会打电话
var foo = new Foo()并且this将引用新创建的对象是即将被引用foo.
当然,没有什么可以阻止你Foo()自己调用,在这种情况下this会引用调用函数的对象.为避免混淆,不建议这样做.
它取决于该函数的使用方式,我们可以使用两种基本类型的函数
会一一看到
1.功能
var example = function () {
console.log(this);
};
example();
Output : window
Run Code Online (Sandbox Code Playgroud)
这里的“ this”关键字指向窗口对象。
默认情况下,它应该始终是窗口对象,它指的是根-全局范围。所以当我们console.log(this); 从我们的函数中,因为它是由窗口(仅被调用)调用的,所以我们应该期望此值为我们的窗口对象:
2.作为对象的功能
var example = function () {
console.log(this);
};
var obj = new example();
Output : example {}
Run Code Online (Sandbox Code Playgroud)
这里的“ this”关键字指向新创建的示例对象。
| 归档时间: |
|
| 查看次数: |
38744 次 |
| 最近记录: |