仿照写了一下VUE methods 实现原理
function VueInstance(options) {
console.log("VueInstance constructor");
this._init(options);
}
VueInstance.prototype._init = function (options) {
let vm = this;
console.log("VueInstance _init");
//init methods
for(let key in options.methods){
console.log("key is: " + key);
vm[key] = options.methods[key] == null ? noop : options.methods[key].bind(vm);
}
};
let vue = new VueInstance({
methods : {
getFunc1 : function () {
console.log("getFunc1 is called");
return "hello vue";
},
getFunc2 : function () {
console.log("getFunc2 is called");
}
}
});
console.log("getFunc1 return: " + vue.getFunc1());
还是利用的对象的prototype 以及 bind, 这样对象类型的参数中的方法就和实例联系起来了。