最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單談?wù)刯avascript中this的隱式綁定

 更新時間:2016年02月22日 10:17:39   投稿:hebedich  
在JavaScript中,this 的概念比較復(fù)雜。除了在面向?qū)ο缶幊讨?,this 還是隨處可用的。這篇文章介紹了this的隱式綁定,希望大家能夠喜歡。

我們先來看一個例子

function foo() {
  console.log( this.a );
}
var obj = {
  a: 2,
  foo: foo
};
obj.foo(); // 2

this指向了obj,因?yàn)閒oo執(zhí)行時的call-site(可以理解為調(diào)用時所在作用域)在obj上面。注意是運(yùn)行的時候,和在哪里聲明的沒有關(guān)系。

call-site and call-stack

call-site姑且理解為調(diào)用域,call-stack為調(diào)用棧。如下代碼可以輔助我們理解

function baz() {
  // call-stack is: `baz`
  // so, our call-site is in the global scope

  console.log( "baz" );
  bar(); // <-- call-site for `bar`
}

在baz()中調(diào)用bar(),所以bar的調(diào)用域是baz,此時bar的調(diào)用棧只有baz;而baz本身暴露在全局作用域中,所以它的調(diào)用域則也在全局作用域中。

function bar() {
  // call-stack is: `baz` -> `bar`
  // so, our call-site is in `baz`
  console.log( "bar" );
  foo(); // <-- call-site for `foo`
}
function foo() {
  // call-stack is: `baz` -> `bar` -> `foo`
  // so, our call-site is in `bar`
  console.log( "foo" );
}
baz(); // <-- call-site for `baz`

理解之后再回頭看開頭的例子,是不是感覺清晰了很多。其實(shí)this只是指向了它的call-site

還有如下玩法:

function foo() {
  console.log( this.a );
}
var obj2 = {
  a: 42,
  foo: foo
};
var obj1 = {
  a: 2,
  obj2: obj2
};
obj1.obj2.foo(); // 42
Implicitly Lost(隱式丟失)
function foo() {
  console.log( this.a );
}
var obj = {
  a: 2,
  foo: foo
};
var bar = obj.foo; // function reference/alias!
var a = "oops, global"; // `a` also property on global object
bar(); // "oops, global"

雖然bar引用了obj上的foo,但實(shí)際上相當(dāng)于是直接對foo引用而已,所以會默認(rèn)綁定到全局。

function foo() {
  console.log( this.a );
}
function doFoo(fn) {
  // `fn` is just another reference to `foo`
  fn(); // <-- call-site!
}
var obj = {
  a: 2,
  foo: foo
};
var a = "oops, global"; // `a` also property on global object
doFoo( obj.foo ); // "oops, global"

相關(guān)文章

最新評論

白朗县| 乐山市| 苗栗市| 温州市| 诸暨市| 化隆| 增城市| 湘潭市| 宁武县| 渝中区| 兖州市| 天祝| 鹰潭市| 瑞丽市| 视频| 武安市| 泰顺县| 屏南县| 黑水县| 阿克陶县| 巨野县| 威海市| 舒城县| 青阳县| 汶川县| 五河县| 府谷县| 鹤庆县| 于都县| 孙吴县| 抚松县| 商洛市| 海安县| 平泉县| 葫芦岛市| 乌什县| 上蔡县| 东光县| 蕲春县| 罗城| 来安县|