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 相关文章推荐
JavaScript 浮点数运算 精度问题
Oct 06 Javascript
Jquery实战_读书笔记2 选择器
Jan 22 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 Javascript
javascript操作referer详细解析
Mar 10 Javascript
JQuery给元素绑定click事件多次执行的解决方法
May 29 Javascript
动态加载js、css的实例代码
May 26 Javascript
前端 Vue.js 和 MVVM 详细介绍
Dec 29 Javascript
详解angular分页插件tm.pagination二次触发问题解决方案
Jul 20 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
Dec 24 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 Javascript
JavaScript实现点击出现子菜单效果
Feb 08 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 heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
如何在PHP中生成随机数
2020/06/04 PHP
Yii实现微信公众号场景二维码的方法实例
2020/08/30 PHP
phpStorm2020 注册码
2020/09/17 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
python list 合并连接字符串的方法
2013/03/09 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
django框架两个使用模板实例
2019/12/11 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
Python定义一个函数的方法
2020/06/15 Python
PyTorch-GPU加速实例
2020/06/23 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
Linux的主要特性
2014/10/06 面试题
网站编辑求职信
2013/10/17 职场文书
七年级英语教学反思
2014/01/15 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
经典婚礼主持词
2014/03/13 职场文书
教师考察材料范文
2014/06/03 职场文书
2015年征兵工作总结
2015/07/23 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers