一、工厂模式
function createPerson(name,age){
var o = {};
o.name = name;
o.age = age;
o.sayHi = function(){
alert('my name is' + this.name);
};
return o;
}
var p1 = createPerson('小明',10);
var p2 = createPerson('小红',9);
p1.sayHi();
p2.sayHi();
console.log(p1.constructor); //Object
console.log(p2.constructor); //Object
 
工厂模式可以创建多个对象,但是并不知道对象的类型,因为都指向了Object
二、构造函数模式
function Person(name,age){
this.name = name;
this.age = age;
this.sayHi = function(){
alert('my name is' + this.name);
};
}
var p1 = new Person('小明',10);
var p2 = new Person('小红',9);
p1.sayHi();
p2.sayHi();
console.log(p1.constructor); //Person(name,age)
console.log(p2.constructor); //Person(name,age)
console.log(p1.sayHi==p2.sayHi);//false

p1的sayHi方法和p2的sayHi方法是不同的,说明每new一个对象就会创建一个sayHi方法,其实这完全没必要,也会浪费空间。

当然代码可以改写如下:
function Person(name,age){
this.name = name;
this.age = age;
this.sayHi = sayHi;
}
function sayHi(){
alert('my name is' + this.name);
}
var p1 = new Person('小明',10);
var p2 = new Person('小红',9);
p1.sayHi();
p2.sayHi();
console.log(p1.constructor); //Person(name,age)
console.log(p2.constructor); //Person(name,age)
console.log(p1.sayHi==p2.sayHi);//true

这时它们方法所指向的代码块就相同,即共用了一个方法。但其实没有必要为了一个类的特权方法就创建一个全局的方法,也会使得这个类显得比较凌乱。

第三、原型链模式
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.sayHi =function(){
alert('my name is' + this.name);
}
var p1 = new Person('小明',10);
var p2 = new Person('小红',9);
p1.sayHi();
p2.sayHi();
console.log(p1.constructor); //Person(name,age)
console.log(p2.constructor); //Person(name,age)
console.log(p1.sayHi==p2.sayHi);//true

对于原型链来创建对象,可以看到对象引用的方法是同一个方法,即类的共有方法。这样极大的节约了代码空间,不会每new一个对象就就类的所有方法创建一遍。

对于对象的特权属性、方法和共有属性、方法在javascript中类的属性研究 这篇文章中有所介绍。

javascript继承(二)—创建对象的三种模式的更多相关文章

  1. JavaScript中创建对象的三种模式

    JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返回. 缺点:创建的对象无法识别类型(全是Object) 2.构造函数模式: ...

  2. javascript 创建对象的7种模式

    使用字面量方式创建一个 student 对象: var student = function (){ name : "redjoy", age : 21, sex: women, ...

  3. Javascript 创建对象的三种方法及比较【转载+整理】

    https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain 本文内容 引 ...

  4. Intel微处理器学习笔记(二) 三种模式

    三种模式:实模式.保护模式和平展模式. 实模式存储器(DOS存储器)位于00000H~FFFFFH,共1M空间(任何型号微处理器都支持). 保护模式存储器(Windows存储器)可位于整个保护存储系统 ...

  5. js创建对象的三种方式和js工厂模式创建对象

    文章地址: https://www.cnblogs.com/sandraryan/ 创建对象 创建对象的三种方式 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象 1. 调用系统的构造函数 ...

  6. JavaScript中创建对象的三种方式!

    JavaScript中创建对象的三种方式! 第一种 利用对象字面量! // 创建对象的三种方式! // 1 对象字面量. var obj = { // 对象的属性和方法! name: 'lvhang' ...

  7. git push :推送本地更改到远程仓库的三种模式

    摘要:由于在git push过程中,no-fast-forward 的push会被拒绝,如何解决git push失败的问题?这里面有三种方法,分别会形成merge形式的提交历史,线性形式的提交历史,覆 ...

  8. LVS三种模式配置及优点缺点比较

    目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种(LVS-DR,LVS-NAT,LVS-TUN)模式的简要配置 LVS是什么: http://www.lin ...

  9. LVS三种模式配置及优点缺点比较 转

    LVS三种模式配置及优点缺点比较   作者:gzh0222,发布于2012-11-12,来源:CSDN   目录: LVS三种模式配置 LVS 三种工作模式的优缺点比较 LVS三种模式配置 LVS三种 ...

随机推荐

  1. nginx 配置单入口

    # 略... location / { try_fiels $uri $uri/ /index.php; } # 略...

  2. BI测试工具之跨数据库数据对比,支持oracle,sqlserver

    应用场景: 本周在进行SIT,我帮助仅有的一个测试妹妹对部分表进行数据质量验证,第一步需要做的就是比对source与stage表的table definition 与 数据内容的一致性. 本项目使用的 ...

  3. [转] KVM Internals, code and more

    KVM Kernel-based Virtual Machine Internals, code and more http://slides.com/braoru/kvm#/ What behind ...

  4. 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决

    出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...

  5. 边工作边刷题:70天一遍leetcode: day 71-3

    Two Sum I/II/III 要点:都是简单题,III就要注意如果value-num==num的情况,所以要count,并且count>1 https://repl.it/CrZG 错误点: ...

  6. HDU 5044 Tree --树链剖分

    题意:给一棵树,两种操作: ADD1: 给u-v路径上所有点加上值k, ADD2:给u-v路径上所有边加上k,初始值都为0,问最后每个点和每条边的值,输出. 解法:树链剖分可做,剖出来如果直接用线段树 ...

  7. POJ 1182 食物链 (三态种类并查集)

    这题首先不说怎么做,首先要提醒的是..:一定不要做成多组输入,,我WA了一个晚上加上午,,反正我是尝到苦头了,,请诸君千万莫走这条弯路..切记 这题是上一题(Find them and Catch t ...

  8. MySQL 约束的讲解

    MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ...

  9. 微软职位内部推荐-Software Engineer II

    微软近期Open的职位: Job Description Group: Search Technology Center Asia (STCA)/Search Ads Title: SDEII-Sen ...

  10. WP老杨解迷:评论数和下载量、榜单的关系

    书接上回,继续研讨评论系统的深层经验,这次从另外一个角度看清榜单关系,提升装逼水准2个加号,如果你能看懂本文,并活学活用,足可在Win10之前醉卧隆中,通晓Windows Phone市场风云变幻,哪些 ...