当前位置: 首页 > 文档资料 > Vdt.js 开发文档 >

this & self & scope

优质
小牛编辑
124浏览
2023-12-01

Vdt模板编译的结果,会添加如下代码

function(obj) {
  var self = this.data, scope = obj;

  ....
}

vdt.render() 方法这样调用模板函数

var vdt = {
  render: function() {
    template.call(vdt, data);

    ...
  }
}

所以

  • this 模板中this指向vdt实例
  • self 模板中self指向渲染到模板的数据this.data
  • scope 模板中scope指向传入模板的数据data

一般情况下,scope === self,但是当模板存在继承时就不相等了,例如:

// @file ./layout.vdt
console.log(self, this)
<div>
  <p>scope.name: {scope.name}</p>
  <p>self.name: {self.name}</p>
  <p>this.data.name: {this.data.name}</p>
</div>
var layout = require('./layout.vdt');

<t:layout name="Vdt" />
var vdt = Vdt(template);
vdt.render({
  name: 'Virtual-Dom'
})

上例中,self & this保持不变,但是scope等于继承layout时传入的数据{name: 'Vdt'}