javascript创建对象之原型模式(三)
少废话,先上代码:
function Human() { }
Human.prototype.name = "成吉思汗";
Human.prototype.sex = "男";
Human.prototype.say = function () {
alert(this.name);
}
var man = new Human();
man.say(); //成吉思汗
var woman = new Human();
woman.say(); //成吉思汗
alert(man.say == woman.say);//true
prototype是javascript中非常核心的知识点之一.他是javascript中的面向对象思想中起着至关重要的作用.
我们来看看prototype是何方妖孽,拥有如此大的威力.
js中每一个函数都有一个prototype属性,我们称之为原型.(这个解释有点烂,等于没说,没办法,不知道怎么给他下定义了^_^);
使用原型对象的好处之一就是让所有的实例共享同样的位于原型上的属性和方法.
上面例子中,name,sex,say都位于prototype上,所以man和woman共享这些属性和方法.内存中虽然有了2个实例,但是他们却只有一份name和sex和say.
这在复杂的项目中可谓是极大的节省了内存.
也因为如此,原型模式才更优胜于上章节介绍的构造函数模式.
这种简单的原型模式一眼就能看出有很多不切合实际的东东:
1.既然所有的属性和方法都共享了,那么我实例化一个对象不就够了吗?
2.每一个对象都是一个个体(有自己特有的属性或方法),而又有相似性(共同的属性和方法),
接下来就有了构造函数模式和原型模式共同作用的结果.这种组合模式在下一章继续.
javascript创建对象之原型模式(三)的更多相关文章
- 理解javascript中的原型模式
一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点: 1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂 ...
- Javascript设计模式之原型模式、发布订阅模式
原型模式 原型模式用于在创建对象时,通过共享某个对象原型的属性和方法,从而达到提高性能.降低内存占用.代码复用的效果. 示例一 function Person(name) { this.name = ...
- 浅谈JavaScript中的原型模式
在JavaScript中创建对象由很多种方式,如工厂模式.构造函数模式.原型模式等: <pre name="code" class="html">/ ...
- 再起航,我的学习笔记之JavaScript设计模式09(原型模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...
- JavaScript面向对象OOM 2(JavaScript 创建对象的工厂模式和构造函数模式)
在创建对象的时候,使用对象字面量和 new Object() 构造函数的方式创建一个对象是最简单最方便的方式.但是凡是处于初级阶段的事物都会不可避免的存在一个问题,没有普适性,意思就是说我要为世界 ...
- OC编程之道-创建对象之原型模式
一 什么是原型模式?(what) 有些对象的创建代价过大或过于复杂,要是可以重建相同的对象并作轻微的改动,事情会容易的多(效率变高).典型的例子是复制组合结构(eg树形结构),从零开始构建一个树型组合 ...
- JavaScript设计模式-3.原型模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JavaScript设计模式 (1) 原型模式
原型模式(Prototype):用原型实例指向创建类对象,使用于创建新对象的类共享原型对象的属性以及方法. //图片轮播类 var LoopImages = function (imgArr, con ...
- js面向对象的程序设计 --- 中篇(创建对象) 之 原型模式
·原型模式 我们创建的每一个函数都由一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有 实例共享的属性和方法. 如果按照字面意思来理解,那 ...
随机推荐
- freeradius的https查询功能
一.服务器要求 Radius服务器:centos6.6.ip.hostname.selinux disabled.stop iptables freeradius版本:3.0.12 二.源码安装fr ...
- TouchJSON的简单使用
TouchJSON是OC转换JSON的一个第三方类库,使用简单.在GitHub上可以轻松获取:TouchJSON 以下是简单的事例演示从douban movie请求JSON数据并转为字典对象后对控件赋 ...
- OC基础:类和对象 分类: ios学习 OC 2015-06-12 18:55 17人阅读 评论(0) 收藏
OC:Objective-c 面向对象的c语言,简称obj-c或者OC OC和C的区别 1.OC是C语言的超集,OC是在C语言的基础上结合smalltalk的优点,开发出来的语言.oc兼容所有 ...
- Adaboost新理解
Adaboost有几个难点: 1.弱分类器的权重怎么理解? 误差大的弱分类器权重小,误差小的弱分类器权重大.这很好理解.在台湾大学林轩田老师的视频中,推导说,这个权值实际上貌似梯度下降,权值定义成1/ ...
- t添加最佳视口
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- HihoCoder - 1051:补提交卡
时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序.100天过去了,小Ho查看自己的提交 ...
- HDU 1232:畅通工程(并查集模板)
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- vue components
https://github.com/vuejs/awesome-vue#components--libraries
- CUDA npp运动检测模块性能测试
测试环境: Cpu: Intel(R)Core(TM)i7-4790 CPU @3.6GHZ GPU: NVIDIA GeForce GTX960 *2 操作系统: Wi ...
- test20181007 wzoi
题意 分析 考场40分 错误的Manacher+dp. 用\(f(i)\)表示\(s_{1 \sim i}\)的最长偶数回文覆盖长度,在Manacher的同时用刷表法转移,每次还要对\(f(i-1)\ ...