如何在添加为属性时使用其他功能来访问功能?

时间:2016-12-01 07:27:23

标签: javascript

我需要从c调用函数b。我使用以下代码,我收到一个错误。 你能告诉我这里有什么问题吗?



var a = function() {
  this.b = function() {
    alert('b');
  };
};

var c = function() {
  a.b();
};

c();




6 个答案:

答案 0 :(得分:3)

您可以使用new operator创建一个实例。

var a = function() {
    this.b = function() {
        alert('b');
    };
};

var c = new a;

c.b();

另一种方法是向函数添加属性并在没有新实例的情况下调用它。

var a = function() {};

a.b = function() {
    alert('b');
};

var c = function() {
    a.b();
};

c();

答案 1 :(得分:2)

b在您使用的a上不可见。要访问它,您需要创建a的对象,因为您将b添加到this。这意味着它将显示在object类型的a上。



var a = function() {
  this.b = function() {
    alert('b');
  };
};

var c = function() {
  new a().b(); // on the object
};

c();




答案 2 :(得分:2)

最好将b作为原型函数,而不是将其放在构造函数中,因为每次创建a的新对象时,都会创建b的新函数实例。使用原型,将在a的所有对象实例中维护一个函数实例。

var a = function() {
};

a.prototype.b = function() {
    alert('b');
};

现在,您可以通过创建b

的新实例来访问a
(new a()).b();

答案 3 :(得分:2)

您应该检查this关键字在javascript中的工作方式。在您的代码中,this函数中的a被绑定到全局对象 - 浏览器中为window,因此:

  var a = function() {
  this.b = function() {
    alert('b');
    };
 };
 a();
 window.b(); //will do the alert

正如其他答案所述,可以通过创建具有a功能的对象来执行您尝试执行的操作,或者使用:

var a = function() {

  return {
      b : function(){
          alert('b');
      }
  }

};
a().b(); //alert

或使用new关键字:

    var a = function() {

  this.b = function() {
    alert('b');
  };
};
var obj = new a();

obj.b();

但是,值得一提的是,您不需要显式创建对象来实现此行为。您还可以设置b成员,这是一个函数,与a函数绑定:

var a = function() {
    //some code
};


a.b = function() {
    alert('b');
};

a.b();//alert

在您的问题中,您尝试做的事情更多。你可以这样做,因为javascript中的函数是可执行对象 - 但是,显式返回一个对象并且使用比将成员附加到函数imho更好。

答案 4 :(得分:0)

您的原始功能是constructor function,因此您需要使用“' new'在调用其成员函数b。

之前创建实例的关键字



var A = function() {
  this.b = function() {
    alert('b');
  };
};

var c = function() {
  var _ = new A();
  _.b();
};

c();




答案 5 :(得分:0)

var a = function() {
           this.b = function() {
           alert('b');
           };
           return this;
        };
var c = function() {
            a().b();
        };

c();