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 相关文章推荐
JQUERY CHECKBOX全选,取消全选,反选方法三
Aug 30 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
jquery插件制作简单示例说明
Feb 03 Javascript
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
jQuery中[attribute!=value]选择器用法实例
Dec 31 Javascript
JavaScript学习笔记之JS函数
Jan 22 Javascript
js 判断所选时间(或者当前时间)是否在某一时间段的实现代码
Sep 05 Javascript
Bootstrap popover用法详解
Dec 22 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
Jan 16 Javascript
深入理解Vue 单向数据流的原理
Nov 09 Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 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中将网址转换为超链接的函数
2011/09/02 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
使用jquery mobile做幻灯播放效果实现步骤
2013/01/04 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
2018/09/21 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
python编写爬虫小程序
2015/05/14 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
家居设计专业个人自荐信范文
2013/11/26 职场文书
环境科学专业个人求职信
2013/12/15 职场文书
运动会表扬稿大全
2014/01/16 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
企业团队精神心得体会
2016/01/19 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python