Javascript 设计模式学习笔记(2) - 继承(Inheritance) (下)

原创 2012年03月21日 20:33:20

        继承(Inheritance)

(三) 原型式继承

原型式继承与类式继承截然不同, 个人感觉比类型继承简单得多, 类式继承 每个实例中都有类的实例属性的一份副本, 实例方法只存在一份

原型式继承不用定义类, 只需定义一个对象就行, 这个对象可以被其它的对象重用, 定义的这个对象叫原型对象 - prototype object

书的作者提醒我们学习原型式继承的时候一定要忘记上一篇关于类和实例的一切知识 - -

/* Person Prototype Object. */

var Person = {
  name; 'default name',
  getName: function() {
    return this.name;
  }
}

var reader = clone(Person);
console.log(reader.getName()); // 'default name'

用到了 clone() 函数, 下面给出 clone() 内部怎么工作的:

/*  Clone function. */

function clone(object) {
  function F() {};
  F.prototype = object;
  return new F; // == return new F();
}

clone() 仅仅是创建了空对象, prototype 指向参数 object 而已.

clone() 的对象不像类继承那样有类实例属性的副本. Sorry.. 应该忘记类继承!

clone 而来的 reader 本身没有父类的属性副本, 也就表现出了一个问题:

(1) 对继承而来的成员的读和写的不对等性

读 reader.name 的时候, reader 本身没有这个属性, 在 reader.prototype 里找到了.

写 reader.name 的时候, 直接在 reader 里写, 不会写到 reader.prototype 里, 这很好理解.

Javascript's hasOwnProperty() 方法可以用来区分是实例对象的成员, 还是继承来的成员.


(四) 类式继承和原型式继承的对比

类式继承和Java C++等比较像, 大家熟悉.

原型式继承没有类那样熟, 但是这种方法简洁 且 省内存.

两种方式可互换.

(五) 继承与封装

只有公用成员和特权成员能够被继承下来.

第一篇中的门户大开型是最合适继承的, 因为其中成员全是公用的.

(六) 掺元类

创建一个具有很多方法的掺元类, 然后用这个类去扩充其它其它类.

/* Mixin class. */

var Mixin = function() {};
Mixin.prototype = {
  foo1: function() {},
  foo2: function() {}
};

augment(Author, Mixin);
var author = new Author();
author.foo1();
author.foo2();

augment(A, B) 作用是将 B.prototype 中每一个成员添加到 A.prototype 中.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

dojo事件机制详解(一)

概述 dojo中的事件实现并不复杂,当然我只是从代码量的角度出发,但含金量还是很高的,而且很容易实现自定义事件监听,还支持发布订阅模式,下面我们从源代码级别来看看 dojo中的事件机制是如何实现的,深...

一句话解释 dojo.publish 和 dojo.subscribe

这俩个函数都与事件紧密相关. -- dojo.subscribe(/*String*/ topic, /*Object|null*/ context, /*String|Function*/ m...

Javascript 设计模式学习笔记(2) - 继承(Inheritance) (上)

继承(Inheritance) Javascript 继承很复杂, 比其它任何面向对象语言都复杂. Javascript 是少数使用 原型式继承 的语言之一, 这也正是 Javascript 的优点...

JavaScript设计模式学习笔记2

上篇有些设计模式没说道,一方面是我没见到,一方面是我不太理解。今天再说说其他的几种设计模式: 1.代理模式 就是我把一件事交给专门的一个处理程序去做。 比如下面这个例子:var keyMgr =...

JavaScript学习记录——《学用 JavaScript 设计模式》学习笔记(2)单例模式

单例模式 在JavaScript语言中, 单例服务作为一个从全局空间的代码实现中隔离出来共享的资源空间是为了提供一个单独的函数访问指针。 我们能像这样实现一个单例:

JavaScript设计模式学习笔记

设计模式可以帮助我们更好的解决一类问题,重复代码。 下面学习一下作为一名前端工程师应该掌握的设计模式: 1.单体模式,也叫单例模式其实就是把自己的代码的作用变量全部放到一个命名空间下面,以便日后的...

javascript 设计模式 学习笔记(一)--基础(this)

在javascript编程中,this,Function.peototype.call和Function.peototype.apply都有着广泛的应用,在学习设计模式之前先理解一下这三个概念。 1....

Javascript 设计模式学习笔记(1) - 封装

封装和信息隐藏 1. 信息隐藏原则 封装是面向对象编程特性之一, javascript 虽然是面向对象的编程语言, 却不像 Java / C++ 那样可以将成员属性声明为私有或是公有. 所以我...

JavaScript设计模式学习笔记:单体模式

tips:继承必备函数function inheritPrototype(subType, superType){ var prototype = Object.create(superTyp...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)