JavaScriptにおけるthisの使用概要
1837 ワード
1、thisのデフォルトバインディング(this=window)
主にcall、appy及びbindに分けられます.
優先度:明示的なバインディングの優先度が最も高い(陰的、デフォルト、およびnewバインディングより大きい).そして、bind優先度はcallおよびappyより大きい.
b、基本タイプが数値のように伝わったらundefinedに戻ります.new Number(数値)に相当します.万物は対象です.
c、ES 6は、明示的なバインディングに対して新たな拡張を行った.varが返したオブジェクト=オブジェクト・bind(バインディングするオブジェクト)
function foo(){
console.log(this == window)//true
}
foo();
2、newバインディング:thisは将来作成するその対象を指します. function Person(){
this.name = " ";
console.log(this)//this p
}
var p = new Person();
3、暗黙的バインディング:オブジェクト・方法() var p = {
name : "abc",
foo : function (){
console.log(this.name);//this p
}
}
p.foo();
//----------------------
var name = " ";
function foo(){
console.log(this.name);
}
var p = {
name : "abc",
foo : foo
}
p.foo();// abc
foo(); // " "
//------------
var p = {
name : "abc",
foo : function (){
console.log(this.name);
}
}
var f = p.foo;
var name = " ";
f(); //
//---------------
var p = {
name : " ",
inner : {
name : " ",
foo : function (){
console.log(this.name);
}
}
}
var name = " ";
p.inner.foo();//
4、明示的なバインディング主にcall、appy及びbindに分けられます.
優先度:明示的なバインディングの優先度が最も高い(陰的、デフォルト、およびnewバインディングより大きい).そして、bind優先度はcallおよびappyより大きい.
var name = "a"
function foo(){
console.log(this.name);
}
// this, 。
var foo1 = foo.bind({name : "b"})
foo1() // b
foo1.call({name : "c"}) // b
a、明示的に結合する時、もし入ってきたのがnullであれば、undefinedの時にthisのバインディングがなくなります.thisはwindowになりますb、基本タイプが数値のように伝わったらundefinedに戻ります.new Number(数値)に相当します.万物は対象です.
c、ES 6は、明示的なバインディングに対して新たな拡張を行った.varが返したオブジェクト=オブジェクト・bind(バインディングするオブジェクト)