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的仿flash的广告轮播代码
Nov 04 Javascript
jquery利用event.which方法获取键盘输入值的代码
Oct 09 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
Apr 04 Javascript
轻松实现Bootstrap图片轮播
Apr 20 Javascript
APP中javascript+css3实现下拉刷新效果
Jan 27 Javascript
javascript点击按钮实现隐藏显示切换效果
Feb 03 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
May 07 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
Vue.js项目模板搭建图文教程
Sep 20 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
Sep 25 Javascript
原生js滑动轮播封装
Jul 31 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的正则处理函数总结分析
2008/06/20 PHP
php抓取https的内容的代码
2010/04/06 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
Asp.net下使用Jquery Ajax传送和接收DataTable的代码
2010/09/12 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
vue.js获得当前元素的文字信息方法
2018/03/09 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
Django中的ajax请求
2018/10/19 Python
Python必须了解的35个关键词
2020/07/16 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
英国复古服装和球衣购买网站:3Retro Football
2018/07/09 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
自主招生自荐信指南
2014/02/04 职场文书
水毁工程实施方案
2014/04/01 职场文书
村党支部换届选举方案
2014/05/02 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
开除通知书范本
2015/04/25 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers
Python之matplotlib绘制饼图
2022/04/13 Python