我需要从c调用函数b。我使用以下代码,我收到一个错误。 你能告诉我这里有什么问题吗?
var a = function() {
this.b = function() {
alert('b');
};
};
var c = function() {
a.b();
};
c();

答案 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();