JavaScript的原型模式

原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象。

http://www.cnblogs.com/TomXu/archive/2012/04/16/2436460.html

http://www.cnblogs.com/silymer/archive/2012/11/02/2751803.html

JS原型对象:所有实例都会共享它里面的属性和方法

原型(prototype),是 JavaScript 特有的一个概念,通过使用原型,JavaScript 可以建立其传统 OO 语言中的继承,从而体现对象的层次关系。JavaScript 本身是基于原型的,每个对象都有一个 prototype 的属性来,这个 prototype 本身也是一个对象,因此它本身也可以有自己的原型,这样就构成了一个链结构。

访问一个属性的时候,解析器需要从下向上的遍历这个链结构,直到遇到该属性,则返回属性对应的值,或者遇到原型为 null 的对象(JavaScript 的基对象 Object 的构造器的默认prototype 有一个 null 原型),如果此对象仍没有该属性,则返回 undefined。

下面我们看一个具体的例子:
//声明一个对象base
function Base(name){
    this.name = name;
    this.getName = function(){
        return this.name;
    }
}
//声明一个对象child
function Child(id){
    this.id = id;
    this.getId = function(){
        return this.id;
    }
}
//将child的原型指向一个新的base对象
Child.prototype = new Base("base");
//实例化一个child对象
var c1 = new Child("child");
//c1本身具有getId方法
print(c1.getId());
//由于c1从原型链上"继承"到了getName方法,因此可以访问
print(c1.getName());

得出结果:
child
base

由于遍历原型链的时候,是有下而上的,所以最先遇到的属性值最先返回,通过这种机制可以完成重载的机制。

prototype的概念

prototype是构造函数的一个属性, 该属性指向一个对象。 而这个对象将作为该构造函数所创建的所有实例的基引用(base reference), 可以把对象的基引用想像成一个自动创建的隐藏属性。 当访问对象的一个属性时, 首先查找对象本身, 找到则返回; 若不, 则查找基引用指向的对象的属性(如果还找不到实际上还会沿着原型链向上查找, 直至到根)。 只要没有被覆盖的话, 对象原型的属性就能在所有的实例中找到。

JavaScript的原型模式

时间: 2024-10-17 19:03:05

JavaScript的原型模式的相关文章

[设计模式] JavaScript 之 原型模式 : Object.create 与 prototype

1. Object.create 1>. 定义: 创建一个可指定原型对象的并可以包含可选自定义属性的对象: 2> Object.create(proto [, properties]);  可选,用于配置新对象的属性; 1. proto: 要创建新对象的 原型,必须,可为 null; 这个 proto 要是已经创建的[new过],或 对象.prototype 才有价值; 2. properties: 可选,结构为: { propField: { value: 'val'|{}|function

javascript对原型模式的理解

在javascript中每创建一个function,就会自动有一个prototype属性,这个属性是一个指针,指向原型对象,原型对象中的有个默认的constructor,这个constructor又指向了那个function

JavaScript设计模式-原型模式

1.JavaScript中,所有函数(类)和部分原始数据类型(Number,String,Array,Function)具有prototype属性. 2.在类的prototype属性上设置的属性,所有实例共享. 3.实例可修改prototype上的属性.如果修改的是值类型,只是当前实例发生更改.如果修改的是引用类型,则会更改类的prototype属性,影响所有实例. 4.类可以直接设置静态属性,可直接通过 "类名.属性名 = 值 "设置和访问,实例不可访问. 1 var Person=

javascript之原型模式学习

1.创建的每个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象.而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法. 字面意思是prototype就是通过调用构造函数而创建的那个对象实例的原型对象.使用原型对象的好处是可以让所有对象实例共享它所包含是属性和方法. 2.无论什么时候,只要创建一个新函数,都会根据一组特定的规则为该函数创建一个prototype属性.这个属性指向函数的原型对象.默认情况下,所有原型对象都会自动获得一个constructor(构造

设计模式(六):原型模式

在读这个模式,头脑里就浮想两个问题: 1. JavaScript的原型模式与普遍的原型模式有什么区别? 2. JavaScript的原型模式与prototype有什么关系? 原型模式定义 原型模式(创建型设计模式)是用一个对象做模板,克隆出新对象. 另外原型模式中的克隆分为"浅克隆"和"深克隆": 浅克隆: 对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象. 深克隆: 对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象

深入理解JavaScript中创建对象模式的演变(原型)

创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Object构造函数和对象字面量方法 工厂模式 自定义构造函数模式 原型模式 组合使用自定义构造函数模式和原型模式 动态原型模式.寄生构造函数模式.稳妥构造函数模式 第一部分:Object构造函数和对象字面量方法 我之前在博文<javascript中对象字面量的理解>中讲到过这两种方法,如何大家不熟悉,可以点进去看一看回顾一下.它们的优点是用来创建单个的对象非常方

javascript中的模式解析——原型模式

理解原型模式,首先要理解prototyoe(这个单词翻译 原型)属性,<javascript高级程序设计>书中描述到——我们创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法. 我在上一篇构造函数模式所说的,我们构建了一个一个Person函数,然后通过new一个person函数来创建了person1实例,person2实例,既然每个函数都有一个prototype属性,那么我有几个问题想要弄明白: per

理解javascript中的原型模式

一.为什么要用原型模式. 早期采用工厂模式或构造函数模式的缺点:  1.工厂模式:函数creatPerson根据接受的参数来构建一个包含所有必要信息的person对象,这个函数可以被无数次的调用,工厂模式尽管解决了创建多个相似对象的问题,却没有解决对象识别的问题(返回的是自定义的一个对象o,不明确对象o的类型).  2. 构造函数模式:构造函数的调用和其他oo语言一样,用new操作符来构建一个Person的实例:javascript中的构造函数也是函数(所以也可以直接像普通函数那样直接调用方法名

Javascript原型模式总结梳理

在大多数面向对象语言中,对象总是由类中实例化而来,类和对象的关系就像模具跟模件一样.Javascript中没有类的概念,就算ES6中引入的class也不过是一种语法糖,本质上还是利用原型实现.在原型编程语言中,类并不是必需的,对象不一定需要由类实例化而来,而是通过克隆另外一个对象来得到. 原型模式是用来创建对象的一种模式.在以类为中心的语言中,要创建一个对象首先要指定这个对象的类型,然后实例化一个对象.使用原型模式创建对象时不必关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样