如以下代码,构造函数Box,我已经对他实例化了,为什么box.run()还是无法访问???
function Box (){
var age = 23;
function run (){
return "运行中。。。"
}
}
var box = new Box();
alert(Box.run()); //无法访问
alert(box.run()); //无法访问
如以下代码,构造函数Box,我已经对他实例化了,为什么box.run()还是无法访问???
function Box (){
var age = 23;
function run (){
return "运行中。。。"
}
}
var box = new Box();
alert(Box.run()); //无法访问
alert(box.run()); //无法访问
首先对于你的这个问题,因为你的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());
也不能这样直接使用,因为函数对象只能实例化之后才可以调用里边儿的方法属性
js中的构造函数是调用的this来定义它本身的量的
function Box() {
this.age=23;
this.run=function() {
return "something";
}
}
var box=new Box();
box.run();
8 回答4.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
首先,Box.run() 显然是错误的,因为
run
并不是Box
的 attribute,所以你不能用.
来访问。而关于
box.run()
就涉及到 constructor 的具体工作方式。当你用new Box()
去创建一个对象时:Box()
函数创建了一个对象,并让该对象连接到Box()
函数的prototype
属性;Box()
函数的this
被绑定到这个新创建的对象。所以,当你得到了这个新建的
box
对象时,你定义的run()
函数并不是这个对象的 attribute,所以当然不能调用。用this.run = function() {...}
去赋值时,这个 function 是run
的值,而run
又是this
的一个 attribute,所以就能够访问了。