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 相关文章推荐
动态表格Table类的实现
Aug 26 Javascript
javascript奇异的arguments分析
Oct 20 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
JavaScript实现图片DIV竖向滑动的方法
Apr 25 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
JS实现从连接中获取youtube的key实例
Jul 02 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
JS控制TreeView的结点选择
Nov 11 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
Sep 27 Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 Javascript
微信小程序修改checkbox的样式代码实例
Jan 21 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
用Php实现链结人气统计
2006/10/09 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
JavaScript仿flash遮罩动画效果
2016/06/15 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
在Vue中使用HOC模式的实现
2020/08/23 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
python数据封装json格式数据
2018/03/04 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
电子信息工程专业推荐信
2014/02/14 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
城管综合整治方案
2014/05/01 职场文书
竞聘上岗演讲
2014/05/19 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
2014年残联工作总结
2014/11/21 职场文书
世界遗产的导游词
2015/02/13 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android