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 居中漂浮广告
Mar 21 Javascript
基于js与flash实现的网站flv视频播放插件代码
Oct 14 Javascript
完美实现仿QQ空间评论回复特效
May 06 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
vue中component组件的props使用详解
Sep 04 Javascript
Node.js如何使用Diffie-Hellman密钥交换算法详解
Sep 05 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
Oct 11 Javascript
使用Vue自定义指令实现Select组件
May 24 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
Aug 16 Javascript
基于javascript的无缝滚动动画1
Aug 07 Javascript
idea编译器vue缩进报错问题场景分析
Jul 04 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 get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
javascript获取URL参数与参数值的示例代码
2013/12/20 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
python局域网ip扫描示例分享
2014/04/03 Python
图文详解WinPE下安装Python
2016/05/17 Python
详解python中init方法和随机数方法
2019/03/13 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
硕士研究生自我鉴定
2013/11/08 职场文书
户外婚礼策划方案
2014/02/08 职场文书
霸王洗发水广告词
2014/03/14 职场文书
2015年数学教师工作总结
2015/05/20 职场文书
退休欢送会主持词
2015/07/01 职场文书
Anaconda安装pytorch及配置PyCharm 2021环境
2021/06/04 Python
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python
Java使用JMeter进行高并发测试
2021/11/23 Java/Android
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers