Javascript面象对象成员、共享成员变量实验


Posted in Javascript onNovember 19, 2010

1)Javascript对象成员实验:

var f = function d() { 
this.a = "a";/*这句运行后不存在f.a也不存在d.a存在一个window.a*/ 
var b = "b";/*局部变量*/ 
}; 
var o = { ff: function () { 
var a = "a"; /*局部变量*/ 
this.b = "b"; /*这句运行后存在o.b*/ 
} 
}; 
function Man(){ 
this.age = 30; 
}; 
Man.prototype.sex = 1; 
Man.prototype.name = function () { 
}; 
debugger;/*第一处断点*/ 
f(); 
o.ff(); 
var m = new Man(); 
debugger; /*第二处断点*/

第一处断点时对象成员的存在情况:

Javascript面象对象成员、共享成员变量实验

第二处断点时对象成员的存在情况:

Javascript面象对象成员、共享成员变量实验

一句话:关于js函数:this指的是所在函数外最近一层的对象,而嵌套函数的内部函数内的this指的是window对象。

一句话:js的oo特性:使用this.成员方式定义对象的成员使用对象具有js特有的动态持性,类与对象实例有差异的,而.prototype.成员定义成员是经典的定义方式,类与对象实例是统一的。
2)Javascript对象共享性成员变量实验:

function Ghost(_name) { 
this.name = _name; 
this.age = 1000; 
} 
Ghost.prototype.setName = function (_name) { 
this.name = _name; 
} 
function Man(_name){ 
this.age = 30; 
this.ghost = new Ghost("实例变量" + _name); 
}; 
Man.prototype.ManGhost = new Ghost("共享变量"); 
var a = new Man("a"); 
var b = new Man("b"); 
var amg = a.ManGhost.setName("我只设置a的共享变量"); 
debugger; /*第一处断点*/ 
var ag = a.ghost; 
var bg = b.ghost; 
var bmg = b.ManGhost; 
debugger; /*第二处断点*/

运行到第一片断点:

Javascript面象对象成员、共享成员变量实验

简单变量与对象变量的差别

使用.prototype.定义的成员,如果该成员为简单变量则,每个对象实例都有一个各自的副本。(例如:Man.prototype.noObejctVar)

使用.prototype.定义的成员,如果该成员对象变量,则每个对象实例都共享同一个对象副本。(例如:Man.prototype.ManGhost)

为什么有这样的差别呢?单从ManGhost变量与noObjectVar变量它们都是使用.prototype.定义的成员是没有差别的,只是它们类型不同,表示它们访问和使用用它们的方式是不同的,只是ManGhost变量内存放的是new出来的对象,而noObjectVar变量内存放的是值(或某种值的引用),换句话说ManGhost存放的是对象的引用,通过这个引用可以操作这个对象,noObjectVar变量内存放也可是某种值引用,可是无法使用这个引用来操作它.

从另一个视角看

noObjectVar变量存放的是字串对象的引用.

a.noObjectVar="新字符串a";

这表示noObjectVar从原来的存放字符串对象引用,指向新字符串对象引用.(也可以说新的字符串对象覆盖原字符串对象)

a.ManGhost=new Ghost("a");

b.ManGhost=new Ghost("b");

这样a与b就不存在共享对象的问题了.不过这样就存在另一个问题.prototype.ManGhost时定义新建的对象就浪费了.不过这样使用.prototype.是错误的.

使用.prototype.定义成员函数及定义共享变量才是正确的用法.

使用javascript来正确的定义类请见:[技术备忘录]javascript来定义类的规范

Javascript 相关文章推荐
用js解决数字不能换行问题
Aug 10 Javascript
js日历功能对象
Jan 12 Javascript
Js+Flash实现访问剪切板操作
Nov 20 Javascript
datagrid框架的删除添加与修改
Apr 08 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
jQuery简单图表peity.js使用示例
May 02 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
Nov 01 Javascript
vue组件如何被其他项目引用
Apr 13 Javascript
javaScript中的空值和假值
Dec 18 Javascript
Material(包括Material Icon)在Angular2中的使用详解
Feb 11 Javascript
使用Javascript简单计算器
Nov 17 Javascript
js 创建快捷方式的代码(fso)
Nov 19 #Javascript
javascript 函数参数限制说明
Nov 19 #Javascript
Javascript的并行运算实现代码
Nov 19 #Javascript
js里的prototype使用示例
Nov 19 #Javascript
Google 静态地图API实现代码
Nov 19 #Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 #Javascript
JS运行耗时操作的延时显示方法
Nov 19 #Javascript
You might like
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php创建基本身份认证站点的方法详解
2013/06/08 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
JQuery验证jsp页面属性是否为空(实例代码)
2013/11/08 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
jQuery验证表单格式的使用方法
2017/01/10 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
JS实现随机生成10个手机号的方法示例
2018/12/07 Javascript
angular 用Observable实现异步调用的方法
2018/12/27 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
用python实现学生管理系统
2020/07/24 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
Python实现石头剪刀布游戏
2021/01/20 Python
小学安全汇报材料
2014/08/14 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
党员四风问题对照检查材料
2014/09/27 职场文书
开会通知
2015/04/20 职场文书
学校光盘行动倡议书
2015/04/28 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Python实现文本文件拆分写入到多个文本文件的方法
2021/04/18 Python
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
Python中如何处理常见报错
2022/01/18 Python
用Python实现屏幕截图详解
2022/01/22 Python
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android