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 相关文章推荐
jQuery 定时局部刷新(setInterval)
Nov 19 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
用JavaScript实现对话框的教程
Jun 04 Javascript
Spring mvc 接收json对象
Dec 10 Javascript
基于socket.io+express实现多房间聊天
Mar 17 Javascript
jQuery Mobile页面返回不需要重新get
Apr 26 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
JavaScript & jQuery完美判断图片是否加载完毕
Jan 08 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
vue将文件/图片批量打包下载zip的教程
Oct 21 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 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获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
javascript URL锚点取值方法
2009/02/25 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
JS实现仿新浪黄色经典滑动门效果代码
2015/09/27 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
node+koa实现数据mock接口的方法
2017/09/20 Javascript
Express系列之multer上传的使用
2017/10/27 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
python实现udp数据报传输的方法
2014/09/26 Python
python统计日志ip访问数的方法
2015/07/06 Python
Python内置函数OCT详解
2016/11/09 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
英国女装网上商店:I Saw It First
2018/10/18 全球购物
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
村居抓节水倡议书
2014/05/19 职场文书
项目经理任命书内容
2014/06/06 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
Python制作表白爱心合集
2022/01/22 Python