kaluoer521 2010-02-06 23:12 采纳率: 0%
浏览 295
已采纳

js对象私有变量公有变量问题

小弟初学JS面向对象编程 现有一问题 请教各位大虾:
Person=function (){
//私有变量定义
var name;
vae age;
var Alert=function (){ alert(name+age);};

return {
printName:function(){ alert(this.Alert());},
printAge:function(){alert(thia.age);}
}
}

外部调用 Person person1=new Person();
person1.name="张三";
person1.age=20;
person1.printAge();//成功没有错误
person1.printName();//报错

请各位指点为什么在公有方法里 用this调私有变量都可以 调私有方法都出错?

  • 写回答

2条回答

  • lang_shao 2010-02-07 10:22
    关注

    [code="javascript"]
    function WhoAmI() //定义一个函数WhoAmI
    {
    alert("I'm " + this.name + " of " + typeof(this));
    };
    WhoAmI(); //此时是this 当前这段代码的全局对象,在浏览器中就是window 对象,其name 属性为空字符串。
    输出:I'm of object
    var BillGates = {name: "Bill Gates"};
    BillGates.WhoAmI = WhoAmI; //将函数WhoAmI 作为BillGates 的方法。
    BillGates.WhoAmI(); //此时的this 是BillGates。输出:I'm Bill Gates of object
    var SteveJobs = {name: "Steve Jobs"};
    SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI 作为SteveJobs 的方法。
    SteveJobs.WhoAmI(); //此时的this 是SteveJobs。输出:I'm Steve Jobs of object
    WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm Bill Gates of object
    WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'm Steve Jobs of object
    8
    BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的WhoAmI 方法。输出:
    I'm Steve Jobs of object
    SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的WhoAmI 方法。输出:
    I'm Bill Gates of object
    WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。
    WhoAmI.name = "WhoAmI";
    WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoAmI of function
    ({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI
    方法。输出:I'm nobody of object
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧