原型链继承
让构造函数的原型对象等于另一个类型的实例,利用原型让一个引用类型继承另一个引用类型的属性和方法
```
function SuperType()
{
this.property=true;
}
SuperType.prototype.getSuperValue=function(){
return this.property;
};
function SubType()
{
this.subProperty=false;
}
//继承SuperType
SubType.prototype=new SuperType();
SubType.prototype.getSubValue=f
继续阅读 »
相信大家写过AngularJS的都会发现,很多人在处理表单的数据绑定时,都习惯性的把ng-model绑定在$scope的一个对象属性上,而不是直接绑定在scope上。比如说使用而不是。这是为什么呢?这样在controller里面岂不是写起来更复杂吗?每次访问的时候都要多“点”一下,为什么不直接绑在$scope上呢?其实这样写自然是有它的好处的,而且这种写法也是推荐的最佳实践,尤其是在处理嵌套scope的情形下,这样写是很有必要的。为了弄清楚这么写的原因,我们需要深入的研究一下AngularJS里scope的继承。
more
基于原型链的继承
AngularJS的官方文档里有这么一句话来描述scope:A "child scope
继续阅读 »
创建类
1.工厂模式:解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)
```
funtion createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () {
alert(this.name);
};
return o;
}
var person1 = createPerson("Nicholas", 29, "SE");
```
2.构造函数模式:缺点是每个方法都要在每个实例上
继续阅读 »
在大部分的语言中,都是类和对象的概念,类继承于其他类
但是在 JavaScript 中,继承是基于原型的,这意味着我们没有真真切切的 "类",我们是由对象继承于对象的(OLOO-Objects Linking to Other Object)
继续阅读 »
content
{:toc}
记录一下阅读蝴蝶书的笔记,本篇为书中以下章节的笔记:继承、数组和正则表达式。
继承
继承的两大好处:代码重用,引入一套类型系统的规范。
伪类
JavaScript 通过构造器函数产生对象。
继续阅读 »
模版方法是一种只需要使用继承就可以实现的非常简单的模式。他由两部分组成,第一部分是抽象父类,第二部分是具体实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些共用方法以及封装子类所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。
Coffee or Tea
假设我们现在要泡一杯咖啡步骤如下:
* 把水煮沸
* 用沸水冲泡咖啡
* 把咖啡倒进杯子
* 加糖和牛奶
泡茶的步骤:
* 把水煮沸
* 用沸水浸泡茶叶
* 把茶水倒进杯子
* 加柠檬
经过比较,我们可以发现泡茶和泡咖啡有以下共同点:
原料不同。一个是茶一个是咖啡,但是我们都可以把它们抽
继续阅读 »
装饰者模式:给对象动态地增加职责。跟继承相比,装饰者是一种更轻便灵活的做法,是一种“即用即付”的方式。
js的装饰者
假设我们在编写一个飞机大战游戏,这个飞机可以升级,发射导弹,发射原子弹
var plane = {
fire: function() {
console.log('发射普通子弹');
}
};
var missileDecorator = function() {
console.log('发射导弹');
};
var atomDecorator = function() {
console.log('发射原子弹');
};
var fire1 = plane.f
继续阅读 »
引用类型
Object类
```text
ECMAScript中的所有类都是由Object类继承而来。
Object类具有下列属性:
Constructor:对创建对象的函数的引用(指针),对于Object类,该指针指向原始的Object()函数
Prototype:对该对象的对象原型的引用。
Object类还有几个方法:
1、PropertyIsEnumerable(property):判断给定的属性是否可以用for...in语句进行枚举
2、ToString():返回对象的原始字符串表示。
3、ValueOf():返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。
继续阅读 »
此文译自 Dmitry A. Soshnikov 的 ECMA-262-3 in detail. Chapter 7.1. OOP: The general theory.
概述
本文主要讨论 ECMAScript 中面向对象编程。之前已经有大量的文章讨论过该话题了,但本文与那些文章不同,本文主要从理论方面来解析其内部原理。重点讨论对象创建算法,对象之间的关系(包含最基本的关系 -- 继承)是如何形成的,并给出了明确的定义(我希望这可以消除一些文章中对于 JavaScript 中 OOP 的疑虑和混乱)。
more
概论、范式和思想
在开始讨论之前,有必要掌握一些 OOP 的基本特征,并弄清楚一些基本概念。
ECMAScr
继续阅读 »
欢迎来到深入解析 ES6 系列,本系列将探讨 JavaScript 即将面世的新版本 -- ECMAScript 6。ES6 包含许多新特性,这使得 JavaScript 语言更强大和更具表现力,接下来的每周我们将逐一揭开 ES6 的神秘面纱。在开始之前,我们值得花几分钟时间来谈谈什么是 ES6 或者你期待它是什么样的。
more
什么是 ECMAScript
JavaScript 语言的标准是由 ECMA(类似 W3C 的标准化组织)制定,并命名为 ECMAScript,除其他事项外,ECMAScript 还定义了:
语法规则 -- 解析规则、关键字、声明、操作符等
变量类型 -- 布尔、数字、字符串、对象等
原型和继承机
继续阅读 »