0

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

小弟初学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调私有变量都可以 调私有方法都出错?


问题补充:

langshao 写道
  1. function WhoAmI() //定义一个函数WhoAmI
  2. {
  3. alert("I'm " + this.name + " of " + typeof(this));
  4. };
  5. WhoAmI(); //此时是this 当前这段代码的全局对象,在浏览器中就是window 对象,其name 属性为空字符串。
  6. 输出:I'm of object
  7. var BillGates = {name: "Bill Gates"};
  8. BillGates.WhoAmI = WhoAmI; //将函数WhoAmI 作为BillGates 的方法。
  9. BillGates.WhoAmI(); //此时的this 是BillGates。输出:I'm Bill Gates of object
  10. var SteveJobs = {name: "Steve Jobs"};
  11. SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI 作为SteveJobs 的方法。
  12. SteveJobs.WhoAmI(); //此时的this 是SteveJobs。输出:I'm Steve Jobs of object
  13. WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm Bill Gates of object
  14. WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'm Steve Jobs of object
  15. 8
  16. BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的WhoAmI 方法。输出:
  17. I'm Steve Jobs of object
  18. SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的WhoAmI 方法。输出:
  19. I'm Bill Gates of object
  20. WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。
  21. WhoAmI.name = "WhoAmI";
  22. WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoAmI of function
  23. ({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI
  24. 方法。输出:I'm nobody of object

谢谢你 答复的很详细 太感谢了。。。你有QQ吗可以加一下吗 以后向你请教

2010年2月06日 23:12


Wanghuidong

18

0
0
1

2个答案
按时间排序
按投票排序

0
0

采纳的答案

  1. function WhoAmI() //定义一个函数WhoAmI
  2. {
  3. alert("I'm " + this.name + " of " + typeof(this));
  4. };
  5. WhoAmI(); //此时是this 当前这段代码的全局对象,在浏览器中就是window 对象,其name 属性为空字符串。
  6. 输出:I'm of object
  7. var BillGates = {name: "Bill Gates"};
  8. BillGates.WhoAmI = WhoAmI; //将函数WhoAmI 作为BillGates 的方法。
  9. BillGates.WhoAmI(); //此时的this 是BillGates。输出:I'm Bill Gates of object
  10. var SteveJobs = {name: "Steve Jobs"};
  11. SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI 作为SteveJobs 的方法。
  12. SteveJobs.WhoAmI(); //此时的this 是SteveJobs。输出:I'm Steve Jobs of object
  13. WhoAmI.call(BillGates); //直接将BillGates 作为this,调用WhoAmI。输出:I'm Bill Gates of object
  14. WhoAmI.call(SteveJobs); //直接将SteveJobs 作为this,调用WhoAmI。输出:I'm Steve Jobs of object
  15. 8
  16. BillGates.WhoAmI.call(SteveJobs); //将SteveJobs 作为this,却调用BillGates 的WhoAmI 方法。输出:
  17. I'm Steve Jobs of object
  18. SteveJobs.WhoAmI.call(BillGates); //将BillGates 作为this,却调用SteveJobs 的WhoAmI 方法。输出:
  19. I'm Bill Gates of object
  20. WhoAmI.WhoAmI = WhoAmI; //将WhoAmI 函数设置为自身的方法。
  21. WhoAmI.name = "WhoAmI";
  22. WhoAmI.WhoAmI(); //此时的this 是WhoAmI 函数自己。输出:I'm WhoAmI of function
  23. ({name: "nobody", WhoAmI: WhoAmI}).WhoAmI(); //临时创建一个匿名对象并设置属性后调用WhoAmI
  24. 方法。输出:I'm nobody of object

2010年2月07日 10:22

langshao

938

0
0
0

0
0
  1. Person = function() {
  2. return {
  3. printName: function() { this.Alert.call(this); },
  4. printAge: function() { alert(this.age); }
  5. }
  6. }
  7. function process() {
  8. //外部调用
  9. person1 = new Person();
  10. person1.name="张三";
  11. person1.age=20;
  12. person1.Alert = function() { alert(this.name + this.age); };
  13. person1.printAge();
  14. person1.printName();
  15. }

js对象私有变量公有变量问题的更多相关文章

  1. js——private 私有方法公有化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 007-Scala类的属性和对象私有字段实战详解

    007-Scala类的属性和对象私有字段实战详解 Scala类的使用实战 变量里的类必须赋初值 def函数时如果没参数可不带括号 2.不需要加Public声明 getter与setter实战 gett ...

  3. JS中的 公有变量、私有变量 !

    公有变量.私有变量 ! 初学者的见解,算是记录学习过程,也算是分享以便共同成长,如有不正确的地方,还请不吝赐教! 先看代码1: function car(){ var wheel = 3; //私有变 ...

  4. 理解js中私有变量

    私有变量在js中是个什么概念.当下我的认识是var所定义的变量,实际可以理解为属性和方法,或者单单是临时存储器,不归属任何对象. 一个声明函数: function a(){  var v = &quo ...

  5. js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态)

    js静态私有变量(将方法变成原型模式,被所有实例共享,而方法操作变量,故变量是静态) 一.总结 1.js函数中的private和public:js函数中的私有变量 var 变量名,公有变量 this. ...

  6. Vue之挂载点、变量、事件、js对象、文本指令、过滤器、事件指令和属性指令

    1.vue导入-挂载点 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...

  7. js的命名空间 && 单体模式 && 变量深拷贝和浅拷贝 && 页面弹窗设计

    说在前面:这是我近期开发或者看书遇到的一些点,觉得还是蛮重要的. 一.为你的 JavaScript 对象提供命名空间 <!DOCTYPE html> <html> <he ...

  8. js 作用域链&内存回收&变量&闭包

    闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等 一.作用域链:函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在 ...

  9. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

随机推荐

  1. MySql数据源配置

    1.tomcat的config/server.xml中将以下代码写到 </Host>前: <Context docBase="struts1" path=&quo ...

  2. PL/SQL通过存储过程为相同数据添加序号

    在Oracle数据库中存有一串数据(Ori_Seq),数据包含不等量重复: 为方便查看与管理,现希望添加一字段(New_Seq),在原有数据的末尾为其添加一串序号,相同数据序号从小到大排列,序号长度为 ...

  3. Android 向系统日历中添加事件

    查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...

  4. 深入剖析Nginx一点小笔记

    前几天在图书馆看书,恰好看到这本<深入剖析nginx>,花了快一周的时间看完了这本书,写点笔记心得便于以后复习. 以前对nginx的认识就只是停留在一个反向代理服务器上.百度了一下ngin ...

  5. NoSQL 精粹

    1.2 阻抗失谐:关系型数据库过于简单和标准的表达方式(表+行或者说关系relation+元组tuple)不能很好的映射到应用(如表达嵌套:和其它表达方式如XML).解决办法:对象-关系映射框架,但查 ...

  6. UNITY 状态机 + SVN + 码云 下篇

    上篇说到自己写的一个FSM状态机,这篇写怎么把代码和码云联系在一起! 首先,我们应该知道为什么使用码云? 码云是开源中国社区2013年推出的基于 Git 的完全免费的代码托管服务,这个服务是基于 Gi ...

  7. blender 2.6 快捷键

    右键单击 选中 A 取消选择/全选 中键拖动 旋转 中键滚动放大/缩小 Shift+中键拖动 平移 右上斜线三角区域拖动 产生新视窗 Shift+c准星复位 Num1前视图 Ctrl+Num1后视图 ...

  8. 【转载】NuGet镜像上线试运行

    原文链接: http://www.cnblogs.com/cmt/p/nuget-mirror.html 在Visual Studio中的添加方法: 由于目前带宽有限,如果出现下面的问题,说明当前带宽 ...

  9. 消息智能路由组件SmartRoute

    消息传递在软件开发过程中是一件很常见的事情,而在不同的场景所使用消息传递方式也有所不同,在对象之间制定相关接口方法和对象结构,对于进程之间可能使用内存共享或一些通讯产品,在不同服务器之的消息通讯则使用 ...

  10. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (3):部署設定及應用 (转帖)

    說明:這一篇主要是說明如何將程式部署到Application Server,以及程式如何運作,產生的檔案置於何處,以及如何以瀏覽器呈現(Applet),或是當成桌面應用程式,或是 桌面Applet,這 ...