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(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有 实例共享的属性和方法. 如果按照字面意思来理解,那 ...
随机推荐
- Delphi发布了社区版及Delphi 10.3展望
http://altd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2_3__93231.iso,注册机在这里 注册号要自己去申请 ...
- PAT 数列求和-加强版 (20分)(简单模拟)
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A).例如A=1, N=3时,S=1+11+111=123 输入格式: 输入数字A与 ...
- webbench-1.5_hacking
/**************************************************************************** * * webbench-1.5_hacki ...
- 【c++基础】accumulate
accumulate // accumulate example #include <iostream> // std::cout #include <functional> ...
- TF-IDF算法(1)—算法概述
假设现在有一篇很长的文章,要从中提取出它的关键字,完全不人工干预,那么怎么做到呢?又有如如何判断两篇文章的相似性的这类问题,这是在数据挖掘,信息检索中经常遇到的问题,然而TF-IDF算法就可以解决.这 ...
- Unity 3D换装系统教程/Demo
Unity3D换装系统教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Costume Change ...
- 【转载】Python字符串操作之字符串分割与组合
1. str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s:表示指定的分隔符,不写的话, ...
- js操作cookie总结 及乱码
涉及到cookie的 setPath问题: https://blog.csdn.net/damys/article/details/49737905 cookie注解:public voic getx ...
- day3 自动部署安装软件到其他的机器设备上
PS:原理是在本机创建boot.sh指向每一台主机,使用脚本命令去执行,然后就会自动安装软件 PS:boot.sh里面放着1.免密登录 2.发送每台机器install.sh 这个install.sh中 ...
- 通过Jersey客户端API调用REST风格的Web服务
Jersey 客户端 API 基础 要开始使用 Jersey 客户端 API,你首先需要创建一个 com.sun.jersey .api.client.Client 类的实例.下面是最简单的方法: i ...