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下通过getList函数实现分页效果的代码
Sep 17 Javascript
javascript 获取iframe里页面中元素值的方法
Feb 17 Javascript
教你如何终止JQUERY的$.AJAX请求
Feb 23 Javascript
Jq通过td获取同行其它列td的方法
Oct 05 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
Nov 18 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
Nov 20 Javascript
bootstrap table插件的分页与checkbox使用详解
Jul 23 Javascript
JS实现在线ps功能详解
Jul 31 Javascript
jQuery实现滑动开关效果
Aug 02 jQuery
js 图片懒加载的实现
Oct 21 Javascript
原生js实现贪吃蛇游戏
Oct 26 Javascript
教你一步步实现一个简易promise
Nov 02 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测试硬盘写入速度示例
2014/01/27 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
语义化 H1 标签
2008/01/14 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
详解vue路由
2020/08/05 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
Python中splitlines()方法的使用简介
2015/05/20 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
python统计mysql数据量变化并调用接口告警的示例代码
2020/09/21 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
美国最大的户外装备和服装购物网站:Backcountry
2019/10/15 全球购物
学雷锋志愿者活动方案
2014/08/21 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python