//        终极版:组合使用构造函数模式和原型模式:*****************************
// 评价:集构造函数模式和原型模式之大成: 用来定义引用类型的一种默认模式
function Person(name, age, job){ //构造函数用来定义实例属性
this.name = name;
this.age = age;
this.job = job;
this.friends = ["Shelby","Court"];
} Person.prototype = { //原型属性用来定义方法和共享属性
constructor: Person,
sayName: function(){
alert(this.name);
}
} var person1 = new Person("Nicolas",29,"SoftWare Engineer");
var person2 = new Person("Greg",27,"Doctor"); person1.friends.push("Van");
alert(person1.friends);
alert(person2.friends); alert(person1.friends === person2.friends);
alert(person1.sayName === person2.sayName);

组合使用构造函数模式以及原型模式:

如上代码所示,构造函数模式用来定义实例属性;而原型模式用来定义方法和共享属性。  其好处在于,这会使得每一个实例都会有自己的一份实例属性的副本,同时又共享着对方法使用。

原型模式的缺点:对于包含引用类型属性的类型来说,当每一个实例化的对象的说,各个对象的引用属性的比较将是变态的。

Person.prototype = {
constructor: Person,
name: "Nicholas",
age: 29,
job: "Software Engineer",
friends: ["Shelby","Court"],
sayName: function(){
alert(this.name);
}
}; var person1 = new Person();
var person2 = new Person(); person1.friends.push("Van"); alert(person1.friends);
alert(person2.friends);
alert(person1.friends === person2.friends);//true

最后一行,在堆person1以及person2的friends属性进行相等比对的时候,返回了近乎完美的true   这是与程序的设计初衷相背的。

对于构造函数模式:

每一次我实例化一个对象时,其中的方法也会被实例化一次(ECMAScript中函数也是对象),而这种行为所造成的结果,创建两个完成同样任务的方法时完全没有必要的,特别是当对象new多了的时候,非常的恐怖哈!!

javascript中用来定义引用类型的一种"默认"模式的更多相关文章

  1. 关于javascript中this 指向的4种调用模式

    this指向问题绝对可以排js 的top 5最难和最重点的问题,初学者常常搞不清楚this指向哪里,特别是学过java和c#的人,想当年俺也迷糊了好久,直到遇到蝴蝶书,主要是因为js和主流的面向对象语 ...

  2. Javascript中用来实现继承的几种方式

    一.原型链继承 原理:修改子类型的原型,使其指向父类型的实例: 缺点: 1,不能以字面量方式在子类型的原型上添加新方法:这回重新改写子类型的原型: 2  创建子类型的实例时无法向父类型的构造函数传参. ...

  3. JavaScript的7种继承模式

    <JavaScript模式>一书中,对于JavaScript的几种继承模式讲解得很清楚,给我提供了很大帮助.总结一下,有如下7种模式. 继承模式1--设置原型(默认模式) 实现方式: // ...

  4. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】 数据库常见死锁原因及处理 .NET源码中的链表 多线程下C#如何保证线程安全? .net实现支付宝在线支付 彻头彻尾理解单例模式与多线程 App.Config详解及读写操作 判断客户端是iOS还是Android,判断是不是在微信浏览器打开

    ASP.NET MVC Filters 4种默认过滤器的使用[附示例]   过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响 ...

  5. JavaScript高级特性-创建对象的九种方式

    1. 对象字面量 通过这种方式创建对象极为简单,将属性名用引号括起来,再将属性名和属性值之间以冒号分隔,各属性名值对之后用逗号隔开,最后一个属性不用逗号隔开,所有的属性名值对用大括号括起来,像这样: ...

  6. JavaScript高级编程——引用类型、Array数组使用、栈方法

    JavaScript高级编程——引用类型.Array数组使用.栈方法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999 ...

  7. javascript中var let const三种变量声明方式

    javascript中var let const三种变量声明方式 1.var  ①var表示声明了一个变量,并且可以同时初始化该变量. ②使用var语句声明的变量的作用域是当前执行位置的上下文:一个函 ...

  8. javascript学习笔记 - 引用类型 Object

    引用类型是一种数据结构,也称作对象定义,类似于类的概念. 对象是引用类型的实例. javascript引用类型有:Object, Array, Date, RegExp, Function 使用new ...

  9. JavaScript的原生引用类型

    引用类型是一种数据结构,用于将数据和功能组织在一起,也常称做类.ECMAScript从技术上说是一门面向对象的语言.但它不具备传统的面向对象语言所支持的类和接口等基本结构. Object类型 大多数引 ...

随机推荐

  1. 写一个 docker 打击一系列手册

    感谢您的关注,分享也再次给自己一个学习的.机会组织和总结.对未来一段时间内准备一个关于 docker 一系列的实际应用,其中的一些内容此前曾宣布.准备再次修改和整理. 以下是主要的文件夹中的一个: 创 ...

  2. 深入浅出JMS(一)——JMS简要

    假设手机只能实时通话.没有邮件和短信功能发生?一个电话回来.只是没有足够的时间去连接.然后传递这款手机的信息肯定是不接受. 么不能先将信息存下来.当用户须要查看信息的时候再去获得信息呢?伴随着这个疑惑 ...

  3. uploadify控制 上传图片到百度云存储

    最近使用uploadify 控制图片上传到百度网盘....总的想法是 招待会uploadify获取文件传入后台,调用百度云存储api上传到百度网盘,返回url 联系.送存储在数据库中的链接.因此,我们 ...

  4. TCP/IP 网络精讲:OSI七层模型(第二课)

    内容简介 1.前言 2.第一部分第二课:互联网的创立,OSI七层模型 3.第一部分第三课预告:OSI第一层,连接你的机器 前言 PS:昨天做了课程大纲之后,发现这个坑挖得有点大.不过既然挖了,岂有不跳 ...

  5. 在前端一定要了解的HTML,CSS知识

    盒子模型 每个盒子都有4个属性:内容(content).填充(padding).边框(border).边界(margin) 每个属性都有四个部分:上.右.下.左 块级元素 内联元素 块级元素(bloc ...

  6. 怎样用C#代码管理SharePoint解决方式

    怎样用C#代码管理SharePoint解决方式         本文我们将了解怎样用代码管理SharePoint解决方式.我们使用server端对象模型抽取解决方式.         SharePoi ...

  7. Oracle 初始化参数文件pfile和spfile

    pfile和spfile差额 pfile :Oracle 9i之前.ORACLE使用我们一直PFILE存储的初始化参数,,能够在操作系统级别改动. 当spfile文件改动出现错误导致oracle无法启 ...

  8. CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)

    JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction ma ...

  9. 一个demo

    package com.entity; /*2015-7-18*/ public class Rover { private CurrentPosition position; public Rove ...

  10. java--照片和BYTE这些东西阵列

    使用java,图像被变换成BYTE排列.和该阵列为图象,远程传输的图片进行 参考:http://blog.csdn.net/huang9012/article/details/18241539 代码例 ...