基于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