1. 程式人生 > >avalonJS中this使用的註意事項

avalonJS中this使用的註意事項

scrip javascrip read 取數據 highlight 獲取數據 dom on() brush

this指針一般是基於宿主環境而存在的一個變量,一般是指向宿主對象,而對於MVVM框架來說,一方面需要在VM中創建對自身對象的操作,同時也可以在V(view)中使用到VM中定義到的方法,以下代碼幫助理解:

//JS 模型

var vm = avalon.define({

  $id:‘vmID‘,

  $getData: function(){

    console.log(this); // this指針的指向因著調用位置的不確定而不確定
  }

})

avalon.ready(function(){

  vm.$getData();

})

// DOM結構

<div ms-controller="vmID">

  <a href="javascript:void(0);" ms-click="$getData()">獲取數據</a>

</div>

  這樣一來,對於方法在VM模型中使用打印的便是VM對象,而對於在DOM節點中使用的模型對象方法調用時,打印的便是DOM節點對象,給予此在MVVM框架中使用this指針時務必要小心。

解決方案可以是,不要直接使用VM對象中的$getData()方法,而是重新定義一個方法:

//JS 模型

var vm = avalon.define({

  $id:‘vmID‘,

  $getData: function(){

    console.log(this);  //this指針的指向不確定
  },
  $jump: function(){
    console.log(this);  //this指針指向DOM節點對象
    vm.$getData();  //vm指向模型對象
  }

})

avalon.ready(function(){

  vm.$getData();

})

// DOM結構

<div ms-controller="vmID">

  <a href="javascript:void(0);" ms-click="$jump()">獲取數據</a>

</div>

avalonJS中this使用的註意事項