JS原型对象通俗"唱法"


Posted in Javascript onDecember 27, 2012

1.关于原型对象的重要知识点

首先要知道一个很重要的知识点,一句话:所有对象都有原型对象.

2. 对比其他语言的理解

原型对象,就是其它语言中的类中的静态属性和静态方法,总是是静态-static就对了.原理是: 内存中只有一份.

3. 在内存中的形象图:

首先,在产生js对象之前,我们需要创造一个构造函数(这都不知道,那就不要往下看了),如下:

function Person(name_, age_) { 
this.name = name_; 
this.age = age_; 
}

下面,我们就要new 对象了,这里,我们new三个(Person)对象,"张三" "李雷" "韩梅梅",他们来自同一个构造函数Person:

JS原型对象通俗"唱法"

内存中就这样了,每个对象,都有自己的 name, age 内存.这里new了多少个对象,就要开辟多少块name, age内存.

看到这,应该还是比较好理解的. 下面我们添加一条属性.location属性,如下:

function Person(name_, age_) { 
this.name = name_; 
this.age = age_; 
this.location = "地球"; 
}

这时候 我们在new这三个人. 内存情况如下:

JS原型对象通俗"唱法"

这里我们看,三个对象都有一个"地球"的内存空间.  这里你要动动大脑了, 三个人都有地球的内存,我们是不是可以这样呢?

JS原型对象通俗"唱法"

你看这样好不好呢? 这样只需要一个地球,大家都可以用了. 看到这,好吧,公用的那个空间如果是个对象的话,就是所谓的原型对象了.饿?就这样?

是的,就这样.

原型对象,最重要的作用就是把常量和方法独立到自身里. 供给其它 "自己的对象" 使用. 最后如图:

JS原型对象通俗"唱法"

4. 从代码的层次上介绍原型对象.

上图是内存中的对象,我们现在从代码的从面操作.

function Person(name_, age_) { 
this.name = name_; 
this.age = age_; 
this.location = "地球"; 
} 
// 三个具体的对象 
var zhangsan = new Person("zhangsan", 21); 
var lilei = new Person("lilei", 21); 
var hanmeimei = new Person("hanmeimei", 21); 
// 他们的原型对象是 
Person.prototype.location = "地球"; 
Person.prototype.killPerson = function() { 
return "杀人"; 
};

这里有一个问题,我们知道原型对象,可是我们怎么访问到原型对象里的属性呢. 就是我们如何获取到location ,和用 killPerson方法呢?
请看:
alert(zhangsan.location); 
alert(zhangsan.killPerson());

这样就可以访问到了,不过前提是,你的对象属性里面,没有定义location和killPerson.不然会把原对象的覆盖掉. 这里面涉及到原型问题即,
在zhangsan.location的时候,首先,我们检查zhangsan对象本身,从图中我们知道,张三有 name, age 和prototype指针属性. 并没有location,找不到以后,它会继续搜索原对象里面,看能否找到location属性,如果有,就会调用原对象的属性.
所以
alert(zhangsan.location) 会输出 "地球" 
alert(zhangsan.killPerson() ) 会输出 "杀人"

以上是我个人对原型对象的理解,希望对大家有帮助.
Javascript 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
juqery 学习之五 文档处理 包裹、替换、删除、复制
Feb 11 Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 Javascript
JS中的log对象获取以及debug的写法介绍
Mar 03 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
Jun 13 Javascript
vue基于Element构建自定义树的示例代码
Sep 19 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
Dec 08 Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
JS常见构造模式实例对比分析
Aug 27 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
vue 移动端记录页面浏览位置的方法
Mar 11 Javascript
通过jQuery源码学习javascript(二)
Dec 27 #Javascript
js 判断一个元素是否在页面中存在
Dec 27 #Javascript
通过jQuery源码学习javascript(一)
Dec 27 #Javascript
Eval and new funciton not the same thing
Dec 27 #Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
Dec 27 #Javascript
JS 添加网页桌面快捷方式的代码详细整理
Dec 27 #Javascript
JavaScript初学者应注意的七个细节详细介绍
Dec 27 #Javascript
You might like
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
JavaScript基本编码模式小结
2012/05/23 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
2013/11/21 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
js实现星星打分效果的方法
2020/07/05 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
JS简单实现移动端日历功能示例
2016/12/28 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
浅谈javascript如何获取文件后缀名
2020/08/07 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python从文件中读取数据的方法讲解
2019/02/14 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
付款委托书范本
2014/04/04 职场文书
三严三实对照检查材料
2014/09/22 职场文书
博士导师推荐信
2015/03/25 职场文书
公司员工辞职信范文
2015/05/12 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
学生安全责任协议书
2016/03/22 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
部分武汉产收音机展览
2022/04/07 无线电
Java设计模式之代理模式
2022/04/22 Java/Android
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers