开发者社区> 问答> 正文

JavaScript 对象怎么调用子方法的属性?

请问外部怎么调用 shool 属性下的:pSchool,mSchool,college ???

    var r1=new ren("王二狗",20,"");

    console.log( r1.age );
    console.log( r1.name );

    console.log( r1.pSchool);
    r1.say();


    function ren(name,age,sex)
    {
        this.name=!name?"某r1":name;
        this.age=!age|age>120|age<=0?1:age;
        this.sex=sex=="MAN"|sex=="WOMAN"?sex:"UNKNOW";

        this.school=schoolF();

        function schoolF()
        {
            this.pSchool="五七小学";
            this.mSchool="实验小学";
            this.college="五七小学";
            console.log("【我是shool方法】,子属性是【"+pSchool+"】【"+mSchool+"】【"+college+"】");
        }

        this.say=function()
        {
            console.log("【我是say方法】,我的名字是"+this.name+",性别是"+this.sex+",年龄是"+this.age+",小学是"+mSchool);
        }
    }

展开
收起
杨冬芳 2016-06-22 12:27:12 1740 0
1 条回答
写回答
取消 提交回答
  • IT从业

    在构造函数ren中,函数schoolF相当于一个闭包;JavaScript 有一个众所周知的坑就是闭包内的this会指向全局,所以你在schoolF里的属性实际上设给了window。
    解决的办法也很简单,就是在schoolF外面先把this保存起来:

    function ren() {
        /*......*/
        var _this = this;
        function schoolF() {
            _this.pSchool = "五七小学";
            /*......*/
        }
    }

    不过看你题目的意思,school是ren的属性,然后pSchool是school的属性?那你得用new调用school才行(楼上也说了)。

    2019-07-17 19:45:24
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载