JavaScript绑定对象
我怎么能这样做 课程JavaScript绑定对象,javascript,Javascript,我怎么能这样做 课程 var Factory = (function() { var Class = function() { this.name = 'John'; this.methods = { get: function(callback) { callback(); } }; }; return { createClass: function() { return new Clas
var Factory = (function() {
var Class = function() {
this.name = 'John';
this.methods = {
get: function(callback) {
callback();
}
};
};
return {
createClass: function() {
return new Class();
}
};
}());
用法
var MyClass = Factory.createClass();
MyClass.methods.get(function() {
this.name // => returns undenfined
});
谢谢你的帮助 您需要在外部
类
函数中保存对此
的引用,然后调用调用
:
var instance = this;
this.methods = {
get: function(callback) {
callback.call(instance);
}
};
@SLaks—将作用域声明为全局变量是一种糟糕的做法。 @费迪南德·拜尔-你测试过它的功能吗 更好的方法是范围绑定。原型javascript框架产生了一个很好的概念,我们可以像这样轻松地实现它
Function.prototype.bind = function(scope) {
var _function = this;
return function() {
return _function.apply(scope, arguments);
}
}
然后你的代码应该只有一个变化,它将维护你的类的范围
var Factory = (function() {
var Class = function() {
this.name = 'John';
var me = this;
this.methods = {
get: function(callback) {
callback();
}
};
};
return {
createClass: function() {
return new Class();
}
};
}());
var MyClass = Factory.createClass();
MyClass.methods.get(function() {
console.info(this.name) // => returns undenfined
}.bind(MyClass));
我的意思是只有函数调用get与.bind(MyClass)实际上,你的问题在这里是什么意思?然后把你的问题贴出来。哎呀,‘我怎么能这样做?’…谢谢你的快速回复!这是唯一的解决方案吗?我的答案不使用任何全局变量。费迪南德的答案与我的答案相同,但变量名不同
var Factory = (function() {
var Class = function() {
this.name = 'John';
var me = this;
this.methods = {
get: function(callback) {
callback();
}
};
};
return {
createClass: function() {
return new Class();
}
};
}());
var MyClass = Factory.createClass();
MyClass.methods.get(function() {
console.info(this.name) // => returns undenfined
}.bind(MyClass));