基于javascript的详细解决方案
Javascript的这与java不同于在面向对象的语言,并结合(),叫(),应用()功能的进一步扩展这个灵活性。为了保证可读性,本文采用意译,而不是直译,此外,本著作的版权归原作者所有,翻译仅用于学习。
如果对Javascript这个关键字的理解不够深入,它有时会陷入意想不到的困境。这里我们总结了5条一般规则来帮助你判断这个指向。虽然所有的案例都不包括在内,但是大多数的日常情况都可以用来正确推断。
这个值通常由函数的执行环境决定,也就是说函数是如何调用的;
同一个函数的每个调用,都可以指向不同的对象。
全局对象(全局对象)
打开Chrome浏览器开发者面板(Windows:Ctrl + Shift + J)(Mac + + +选项+ J)和输入:
console.log(本);
看看输出是什么
{窗口
窗口对象!因为在全局范围内,这指向全局对象,在浏览器中,全局对象是窗口对象。
为了让您更好地理解为什么这指向窗口对象,让我们看看另一个例子:
VAR我= 'brandon;
我们可以通过在控制台输入我的名字访问它的值:
我的名字
输出/ 'brandon
事实上,全局定义中的所有变量都绑定到窗口对象:
window.myname
输出/ 'brandon
window.myname =我
输出
现在我们把这个放在函数中,看看它是如何工作的。
函数测试(){
返回此;
}
测试();
您会发现这仍然指向全局窗口对象。因为这个关键字不在声明对象中,默认点指向全局窗口对象。这对大多数初学者来说可能有点难理解。读完这篇文章后,您会感到惊讶。
注意:如果在strcit模式,这是在上面的例子。
声明的对象(声明对象)
当这个关键字在一个声明的对象中使用时,它的值被绑定到调用这个函数的最近的父对象:
var
第一:约翰,
最后:'smith,
全部:函数(){
console.log(首先+ +,最后);
}
};
Person.full();
输出of'john / /史密斯
这个函数用于声明对象对象的全部函数。然后调用这个完整函数的最近父对象是人,所以这指向了人。
为了更好地描述实际指向人对象的这一点,您可以将以下代码复制到浏览器控制台并打印出来。
var
第一:约翰,
最后:'smith,
全部:函数(){
console.log(本);
}
};
Person.full();
对象{
让我们来看一个更复杂的例子。
var
第一:约翰,
最后:'smith,
全部:函数(){
console.log(首先+ +,最后);
},
persontwo:{
第一:'阿利森,
最后:'jones,
全部:函数(){
console.log(首先+ +,最后);
}
}
};
这里我们有嵌套的对象,在这个时候,谁将指向这个点让我们把它打印出来看看。
Person.full();
输出of'john / /史密斯
Person.personTwo.full();
输出of'allison / /琼斯
您将发现我们前面描述的规则:它们的值将绑定到调用此函数的最近的父函数。
新的关键字
当使用新关键字构建一个新对象时,这将绑定到新对象:
功能车(制造,模型){
this.make =使;
方法=模型;
};
根据第一条规则,你就可以推断,这一点对全局对象。但如果我们声明了一个新的变量,使用新的关键词,这在汽车功能将绑定一个新的空对象和初始化方法this.make和价值。
VaR myCar =新车('ford ','escape);
console.log(我的车);
汽车{输出:输出福特
调用、绑定和应用
我们可以在调用()、绑定()和应用()中显示绑定对象。这三个函数非常相似,但是我们需要注意它们之间的细微差别。
让我们看一个例子:
函数添加(c,d){
console.log(,+,B + C + D);
}
添加(3,4);
输出 NaN
因为这个函数的输出函数没有定义。
现在我们介绍对象,并使用调用()和应用()来调用:
函数添加(c,d){
console.log(,+,B + C + D);
}
var十= a:1,b:2 };
add.call(十,3, 4);
10 输出
Add.apply(十,{,});
10 输出
当我们使用add.call(),第一个参数是对象,这需要绑定,其余的是添加功能的原始参数。
所以,这一点至十,这ten.b.add.apply。B点()类似,除了第二个参数是一个数组,用来存储添加函数的参数。
绑定()函数类似于调用(),但立即不调用绑定()函数。绑定()函数返回一个函数并绑定这个函数。Next,让我们使用示例来帮助理解绑定()函数的应用场景:
var小= {
甲:1,
函数(b,c,d){
(这console.log。A + B + C + D);
}
}
var
答:100
}
实施:
小。(2, 3, 4);
10 输出
如果我们要使用大的值,A,而不是小的,怎么办我们可以使用调用/应用:
小..呼叫(大,2, 3, 4);
109 输出
但是,如果我们不知道现在应该引入三个参数,我们该怎么办呢我们可以使用绑定:
无功bindtest =小..绑定(大,2);
如果我们打印出来bindtest控制台下,我们会看到:
console.log(bindtest);
函数的输出(b、c、d、{ log)。
注意:这个函数把这个绑定到大对象并传递了第一个参数,所以我们需要传递剩下的参数:
(3, 4)bindtest;
109 输出
箭头函数(=)
因为它需要很大的空间,我们会写一篇博客来介绍它。
结论
当你读完这篇博客时,你应该能够理解在大多数情况下这一点所指向的对象。
那么让我们总结一下。
这个值通常由当前函数的执行环境决定;
在全局范围内,这指向全局对象(窗口对象);
当使用新的关键字声明时,这指向新对象;
我们可以使用调用()()、绑定()、应用()来设置这个;
箭头函数不绑定此。
原文:Javascript:初学者的关键字
翻译:fundebug