Javascript 当添加为属性时,如何访问另一个函数中的函数?

Javascript 当添加为属性时,如何访问另一个函数中的函数?,javascript,Javascript,我需要从c调用函数b。我正在使用以下代码,收到一个错误。 你能告诉我这里怎么了吗 var a=function(){ this.b=函数(){ 警报(“b”); }; }; var c=函数(){ a、 b(); }; c()您使用的a上看不到b。要访问它,您需要创建a的对象,因为您将b添加到this。这意味着它将在类型为a的对象上可见 var a = function() { }; a.prototype.b = function() { alert('b'); }; var

我需要从c调用函数b。我正在使用以下代码,收到一个错误。 你能告诉我这里怎么了吗

var a=function(){
this.b=函数(){
警报(“b”);
};
};
var c=函数(){
a、 b();
};

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

var a = function() {
};

a.prototype.b = function() {
    alert('b');
};
var a=function(){
this.b=函数(){
警报(“b”);
};
};
var c=函数(){
在对象上新建a().b();//命令
};

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

var a = function() {
};

a.prototype.b = function() {
    alert('b');
};
var a=function(){
this.b=函数(){
警报(“b”);
};
};
var c=函数(){
在对象上新建a().b();//命令
};

c()您可以使用创建一个实例

var a=function(){
this.b=函数(){
警报(“b”);
};
};
var c=新的a;

c、 b()您可以使用创建一个实例

var a=function(){
this.b=函数(){
警报(“b”);
};
};
var c=新的a;

c、 b()您的原始函数是a,因此在调用其成员函数b之前,需要使用“new”关键字创建实例

var A=function(){
this.b=函数(){
警报(“b”);
};
};
var c=函数(){
var=新的A();
_.b();
};

c()您的原始函数是a,因此在调用其成员函数b之前,需要使用“new”关键字创建实例

var A=function(){
this.b=函数(){
警报(“b”);
};
};
var c=函数(){
var=新的A();
_.b();
};

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

var a = function() {
};

a.prototype.b = function() {
    alert('b');
};
现在,您可以通过创建
a的新实例来访问
b

(new a()).b();

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

var a = function() {
};

a.prototype.b = function() {
    alert('b');
};
现在,您可以通过创建
a的新实例来访问
b

(new a()).b();

您应该检查
this
关键字在javascript中的工作方式。在您的代码中,
a
函数中的
这个
绑定到全局对象——在浏览器中是
窗口
,因此:

  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更好

您应该检查
this
关键字在javascript中的工作方式。在您的代码中,
a
函数中的
这个
绑定到全局对象——在浏览器中是
窗口
,因此:

  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更好

谢谢,你能详细解释一下为什么函数绑定到全局对象吗?@Radex这是语言的工作方式:当你从对象调用函数时,
这个
绑定到该对象。如果您无中生有地调用一个函数,它将绑定到引擎盖下的
global
。我猜你不能调用裸函数,你必须从一个对象调用它们,编译器为你做这项工作,并将裸函数调用绑定到
global
,就像
function()
声明被编译器绑定到变量一样。这是一个众所周知的javascript“bug”:您可以在“javascript:the good parts”一书和“you Not know javascript”系列中对此进行详细阅读。谢谢,您能详细说明函数绑定到全局对象的原因吗?@Radex这是语言的工作方式:当您从对象调用函数时,
绑定到该对象。如果您无中生有地调用一个函数,它将绑定到引擎盖下的
global
。我猜你不能调用裸函数,你必须从一个对象调用它们,编译器为你做这项工作,并将裸函数调用绑定到
global
,就像
function()
声明被编译器绑定到变量一样。这是一个众所周知的javascript“bu”