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));