构造函数里的方法访问

如以下代码,构造函数Box,我已经对他实例化了,为什么box.run()还是无法访问???

function Box (){
    var age = 23;
    function run (){
        return "运行中。。。"
    }
}
var box = new Box();
alert(Box.run());  //无法访问
alert(box.run());  //无法访问
阅读 3.3k
5 个回答

首先,Box.run() 显然是错误的,因为 run 并不是 Box 的 attribute,所以你不能用 . 来访问。

而关于 box.run() 就涉及到 constructor 的具体工作方式。当你用 new Box() 去创建一个对象时:

  1. Box() 函数创建了一个对象,并让该对象连接到 Box() 函数的 prototype 属性;

  2. Box() 函数的 this 被绑定到这个新创建的对象。

所以,当你得到了这个新建的 box 对象时,你定义的 run() 函数并不是这个对象的 attribute,所以当然不能调用。用 this.run = function() {...} 去赋值时,这个 function 是 run 的值,而 run 又是 this 的一个 attribute,所以就能够访问了。

this.run = function(){
    return "运行中。。。"
}

首先对于你的这个问题,因为你的Box()只是一个函数,而run()只是Box()的一个私有函数,私有函数只能在函数内部调用即Box()内部调用,在Box()外部,不能够调用run()这个函数方法。

 function Box() {
        this.age = 23;
        this.run = function () {
            return "运行中。。。";
        }
    }

    var box = new Box();
    alert(box.run());

你这样试试,你应该是使用构造函数的方法创建对象的话可以这样调用
但是即使是构造一个对象

 alert(Box.run());

也不能这样直接使用,因为函数对象只能实例化之后才可以调用里边儿的方法属性

新手上路,请多包涵

也可以在函数后面加上

return {
run: run
}

js中的构造函数是调用的this来定义它本身的量的

function Box() {
this.age=23;
this.run=function() {
return "something";
  }
}
var box=new Box();
box.run();
推荐问题
宣传栏