[b]继承inheritance[/b]:在那些基于类的语言(比如java)中,继承提供了两个有用的服务。
一、[color=red]它是代码重用的一种形式[/color];
二、[color=red]它包含了一套类型系统的规范(无须显式类型转换)[/color]。
JavaScript是一门[color=red]弱类型[/color]的语言,从来不需要类型转换。对象的起源是无关紧要的。对于一个对象来说,重要的是它能做什么,而不是它从哪里来。
在基于类的语言中,对象是类的实例,并且类可以从另一个类继承。JavaScript是一门[color=red]基于原型的语言,这意味着对象直接从其他对象继承[/color]。
[b]伪类[/b]:
当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的代码:
this.prototype = {constructor : this};
[color=red]新函数对象被赋予一个prototype属性,其值是包含一个constructor属性且属性值为该新函数对象[/color]。该prototype对象是存放继承特征的地方。因为JavaScript语言没有提供一种方法去确定哪个函数打算用来做构造器的,所以每个函数都会得到一个prototype对象。constructor属性没有什么用,重要的是prototytpe对象。
[b]对象说明符Object Specifiers[/b]:
有时候,构造器要接受一大串参数。这可能是令人烦恼的,因为要记住参数的顺序可能非常困难。这种情况下,如果我们在编写构造器时,使其接受一个简单的[color=red]对象说明符[/color]可能会更加友好。那个对象包含了将要构建的对象规格说明。
var myObject = maker(f, l, m, c, s)
var myObject = maker ({
first : f,
last : l,
state : s,
city : c
});
现在[color=red]多个参数可以按任何顺序排列[/color],如果构造器会聪明地使用[color=red]默认值[/color],一些参数可以忽略掉,并且代码也更容易阅读。
[b]原型Prototypal[/b]:
在一个纯粹的原型模式中,我们会摒弃类,转而专注于对象。基于原型的继承相比基于类的继承在概念上更为简单:[color=red]一个新对象可以继承一个旧对象的属性[/color]。你通过构造一个有用的对象开始,接着可以构造更多和那个对象类似的对象。可以完全避免把一个应用拆解成一系列嵌套抽象类的分类过程。
[b]函数化Functional[/b]:
迄今为止,所看到的继承模式的一个弱点就是我们没法保护隐私。对象的所有属性都是可见的。我们没法得到私有变量和私有函数([color=red]伪装私有的模式:起一个古怪的名字,并且希望其他使用代码的用户假装看不到。[/color])。幸运的是,我们有一个更好的选择,那就是[color=red]模块模式[/color]的应用。
[b]部件Parts[/b]:
我们可以从一套部件中组合出对象来。
一、[color=red]它是代码重用的一种形式[/color];
二、[color=red]它包含了一套类型系统的规范(无须显式类型转换)[/color]。
JavaScript是一门[color=red]弱类型[/color]的语言,从来不需要类型转换。对象的起源是无关紧要的。对于一个对象来说,重要的是它能做什么,而不是它从哪里来。
在基于类的语言中,对象是类的实例,并且类可以从另一个类继承。JavaScript是一门[color=red]基于原型的语言,这意味着对象直接从其他对象继承[/color]。
[b]伪类[/b]:
当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的代码:
this.prototype = {constructor : this};
[color=red]新函数对象被赋予一个prototype属性,其值是包含一个constructor属性且属性值为该新函数对象[/color]。该prototype对象是存放继承特征的地方。因为JavaScript语言没有提供一种方法去确定哪个函数打算用来做构造器的,所以每个函数都会得到一个prototype对象。constructor属性没有什么用,重要的是prototytpe对象。
[b]对象说明符Object Specifiers[/b]:
有时候,构造器要接受一大串参数。这可能是令人烦恼的,因为要记住参数的顺序可能非常困难。这种情况下,如果我们在编写构造器时,使其接受一个简单的[color=red]对象说明符[/color]可能会更加友好。那个对象包含了将要构建的对象规格说明。
var myObject = maker(f, l, m, c, s)
var myObject = maker ({
first : f,
last : l,
state : s,
city : c
});
现在[color=red]多个参数可以按任何顺序排列[/color],如果构造器会聪明地使用[color=red]默认值[/color],一些参数可以忽略掉,并且代码也更容易阅读。
[b]原型Prototypal[/b]:
在一个纯粹的原型模式中,我们会摒弃类,转而专注于对象。基于原型的继承相比基于类的继承在概念上更为简单:[color=red]一个新对象可以继承一个旧对象的属性[/color]。你通过构造一个有用的对象开始,接着可以构造更多和那个对象类似的对象。可以完全避免把一个应用拆解成一系列嵌套抽象类的分类过程。
[b]函数化Functional[/b]:
迄今为止,所看到的继承模式的一个弱点就是我们没法保护隐私。对象的所有属性都是可见的。我们没法得到私有变量和私有函数([color=red]伪装私有的模式:起一个古怪的名字,并且希望其他使用代码的用户假装看不到。[/color])。幸运的是,我们有一个更好的选择,那就是[color=red]模块模式[/color]的应用。
[b]部件Parts[/b]:
我们可以从一套部件中组合出对象来。