原型模式与Javascript

原型模式


“使用特定原型实例来创建特定种类的对象,并且通过拷贝原型来创建新的对象”。
在创建比较复杂的对象的时候,使用ctrl+c和ctrl+v固然是一种方法,但是太粗暴,除非你想吹嘘你写代码的行数。

使用原型模式可以更方便的创建对象,通过编写一个clone函数,将创建对象的细节隐藏,就可以创建一个和被克隆对象一样的对象。比如想要生成大量小怪的时候,通过一个小怪的模板,就可以优雅地实现了~

原型语言


“面向对象编程”并不等同于“类”,基于原型的语言,也可以说是面向对象的,或者说是“真·面向对象”,因为它不管是属性和方法,都是在对象中的,一个实例包含状态和行为。通过对象去创建对象,这就是原型的世界。

原型模式与Javascript_第1张图片
基于类的语言

原型模式与Javascript_第2张图片
基于原型的语言

原型语言的简单定义:

  1. 只有对象,没有类;对象继承对象,而不是类继承类。
  1. “原型对象”是核心概念。原型对象是新对象的模板,它将自身的属性共享给新对象。一个对象不但可以享有自己创建时和运行时定义的属性,而且可以享有原型对象的属性。
  2. 每一个对象都有自己的原型对象,所有对象构成一个树状的层级系统。root节点的顶层对象是一个语言原生的对象,只有它没有原型对象,其他所有对象都直接或间接继承它的属性。

Javascript


Javascript是基于原型的语言,在javascript中,每个对象可以有任意属性集合,它们可以是属性和方法,一个对象也能拥有其他对象。

和上面讲的稍有不同的是,javascript中没有一个方法可以用来克隆对象,如果你要在javascript中定义创建对象的方法,首先需要创建这样一个构造函数:

function Person(name) {
    this.name = name;
}

当然还需要定义一些行为:

Person.prototype.getName = function(){
    return this.name;
}

然后用下面的语法创建新的对象并初始化对象相应的属性:

var person = new Person("魔法少女");

当使用new关键字创建对象时,做了以下几件事:

  • 调用Person方法,创建一个空对象,并且把this指针绑定到这个新创建的对象上。
  • 创建一个指向Person.prototype的指针。
  • Person方法给this对象添加了name属性。
  • 将这个初始化属性的对象返回。

最后person就是一个包含原型对象和自身属性的一个对象了,当调用person.getName()时,最自动调用原型对象的对应方法。

你可能感兴趣的:(原型模式与Javascript)