代码之家  ›  专栏  ›  技术社区  ›  Vinay

如何访问函数中的JavaScript函数

  •  -1
  • Vinay  · 技术社区  · 8 年前

    function x(name, age) {
      this.name = name;
      this.age = age;
    
    
      this.a = function() {
        this.b = function() {
          return "b";
        };
    
        return "a";
      };
    }
    
    var xobj = new x('vin', 25);
    console.log(xobj.a.b()); //error
    2 回复  |  直到 8 年前
        1
  •  2
  •   marvel308    8 年前

    function x(name, age){
     this.name  =name;
     this.age = age;
     
    
     this.a = function(){
    			
    		this.b = function(){
    			return "b";
            };
    
    	return "a";
      };
      
    }
    
    
    var xobj =new x('vin',25);
    var xx = new xobj.a();
    console.log(xx.b());

    您必须声明x.a()的一个实例,然后调用b

    当函数用作构造函数(使用new关键字)时,它的this绑定到正在构造的新对象。因此,如果要在函数a()内调用此函数,则必须使用 new 关键字

        2
  •  0
  •   SidOfc    8 年前

    @marvel308's answer . 我当然不讨厌用户:)我只是不喜欢链接答案提供的可读性和可理解性,尽管付出了很大努力。虽然这可能是一个解决方案,但每次你看到它被使用时,你可能都要用谷歌搜索,因为它不容易理解——让我们避免它。

    现在如果 筑巢不是 这就是 绝对需要 ,您可以选择更简单的解决方案,使用顶级定义的多个函数:

    function Person(name, age) {
        this.name = name;
        this.age  = age;
    }
    
    function sayHelloToPerson(person) {
        console.log("Hello! " + person.name + ", it seems you are: " + person.age + " years old");
    }
    

    var me = new Person("SidOfc", 22);
    sayHelloToPerson(me);
    // => "Hello! SidOfc, it seems you are: 22 years old"
    

    我不能确定这段代码的可用性,因为用例太不清楚了,但通过这种方式,您可以保持意图明确,并且始终可以使用函数参数传递函数需要的任何数据(例如 person

    如果你像其他JS开发人员一样讨厌污染全局名称空间,那么封装所有与之相关的函数 x ( Person 在我的例子中) 而不是嵌套深度超过1层。例如

    function Person(name, age) {
        this.name = name;
        this.age  = age;
    
        this.sayHello = function() {
            console.log("Hello! " + this.name + ", it seems you are: " + this.age + " years old");
            this.sayGoodbye();
        };
    
        this.sayGoodbye = function() {
            console.log("Goodbye! " + this.name);
        }
    }
    

    var me2 = new Person("SidOfc", 22);
    me2.sayHello();
    // => "Hello! SidOfc, it seems you are: 22 years old"
    // since sayHello calls this.sayGoodbye() we also get:
    // => "Goodbye! SidOfc"
    

    这背后的想法是创建与 x (

    然后,它们可以调用其他函数 没有这些疯狂的嵌套结构,实例中的属性很容易。由于从调用函数,因此也不需要添加任何参数 那个 实例(当然,这将根据您的需要而变化)。

    作为额外的好处,你不再需要你想要的东西,因为你现在可以使用 me2.somefunction() 而不是深入挖掘。

    推荐文章