javascript - 构造函数里的方法访问
怪我咯
怪我咯 2017-04-11 12:11:29
[JavaScript讨论组]

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

function Box (){
    var age = 23;
    function run (){
        return "运行中。。。"
    }
}
var box = new Box();
alert(Box.run());  //无法访问
alert(box.run());  //无法访问
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(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();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号