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 Math 对象的方法
Sep 01 Javascript
jQuery异步验证用户名是否存在示例代码
May 21 Javascript
jquery浏览器滚动加载技术实现方案
Jun 03 Javascript
js的image onload事件使用遇到的问题
Jul 15 Javascript
浅谈JavaScript中的字符编码转换问题
Jul 07 Javascript
js点击返回跳转到指定页面实现过程
Aug 20 Javascript
微信小程序 生命周期详解
Oct 12 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
深入理解JS的事件绑定、事件流模型
May 13 Javascript
使用vue-cli导入Element UI组件的方法
May 16 Javascript
JS数据类型STRING使用实例解析
Dec 18 Javascript
vue组件vue-esign实现电子签名
Apr 21 Vue.js
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页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php截取中文字符串函数实例
2015/02/23 PHP
PHP检查URL包含特定字符串实例方法
2019/02/11 PHP
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
简单实现JS倒计时效果
2016/12/23 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
JavaScript 如何计算文本的行数的实现
2020/09/14 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python算法之栈(stack)的实现
2014/08/18 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
2017/06/05 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
关于python写入文件自动换行的问题
2018/06/23 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
ipad上运行python的方法步骤
2019/10/12 Python
python 实现音频叠加的示例
2020/10/29 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
财务会计专业求职信范文
2013/12/31 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏