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. 关于纯移动web优点的一点思考

    自己造个小概念,纯移动web就是手机浏览器上访问的网站^_^ 缺点就不说了,说几个随着硬件和网络发展会放大的优势. 1 相对app来说,完全无缝对接,只要符合html标准,一次开发全平台部署 2 推广 ...

  2. windows环境下安装win8.1+Mac OS X 10.10双系统教程

    首先要感谢远景论坛里的各位大神们的帖子  没有他们的分享我也不能顺利的装上Mac OS X 10.10! 写这篇随笔主要是为了防止自己遗忘,同时给大家分享下我的经验. 本教程适用于BIOS+MBR分区 ...

  3. SIFT中的尺度空间和传统图像金字塔

    SIFT中的尺度空间和传统图像金字塔 http://www.zhizhihu.com/html/y2010/2146.html 最近自己混淆了好多概念,一边弄明白的同时,也做了一些记录,分享一下.最近 ...

  4. 怎么让让整个HTML页面变灰

    怎么让让整个HTML页面变灰 其实很简单,我们只需要一句话. html {filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1 ...

  5. 你好,欢迎来到我的博客,我是博主royalmice

    你好,欢迎来到我的博客,我是博主royalmice

  6. inno 实现水波特效

    安装Inno Setup时如果选择了水波效果插件(如下图),将在Inno Setup的安装目录下自带有水波特效的例子,如路径:C:\Program Files (x86)\Inno Setup 5\E ...

  7. cent7内核升级4.9

    一.手动档 手动档就是从源码开始编译内核安装,好处是可以自己选择任意版本的内核,缺点就是耗时长,编译安装消耗系统资源 1.1.获取 kernel 源码 这世界上最伟大的 Linux 内核源码下载地址是 ...

  8. javascript position兼容性随笔

    一.Javascript源码 if (!window.jasen.core.Position) { window.jasen.core.Position = {}; } function Size(w ...

  9. Blend 2015 教程 (四)控件模板

    前一篇讲述了修改ListBox样式的方法,本篇将修改性别显示区域的样式. 1. 选择ListBox控件,编辑ItemTemplate的当前项,选择CheckBox控件,在美工板导航栏中点击CheckB ...

  10. jenkins + Git 搭建持续集成环境

    持续集成通过自动化构建.自动化测试以及自动化部署加上较高的集成频率保证了开发系统中的问题能迅速被发现和修复,降低了集成失败的风险,使得系统在开发中始终保持在一个稳定健康的集成状态.jenkins是目前 ...