《javascript语言精粹》学习笔记3

第五章 继承
在基于类的语言中,对象是类的实例,而且类能够从另外一个类继承。js特别在于它是基于原型的语言,它的对象能够直接从其余对象继承。
1.伪类

伪类的意思是,js有new的相似于类的写法。只是这种写法,看起来格格不入,实际上隐藏那些无谓的prototype操做细节,它仍是没有私有环境,也没法访问super类。 2.对象说明符

传递的参数以列表的形式,倒不如以对象的形式。函数

<!-- lang: js -->
var myObject = maker(f, l ,m, c, s);

var myObject = maker({
first: f,
middle: m,
last: l,
state: s,
city: c
});

3.原型

基于原型的继承:一个新对象能够继承一个就对象的属性。经过构造一个有用的对象开始,接着能够构造更多和那个对象相似的对象。 先构造一个有用的对象。this

<!-- lang: js -->
var myMammal = {
name : 'Herb the Mammal',
get_name : function () {
	return this.name;
},
says : function () {
	return this.saying || '';
}
};

接下来,利用第三章的Object.create方法构造更多的实例(见我前面的文章第6点)。spa

<!-- lang: js -->
var myCat = Object.create(myMammal);
myCat.name = 'Henrietta';
myCat.saying = 'meow';
myCat.purr = function (n) {
	var i, s = '';
	for (i = 0; i < n; i += 1) {
		if (s) {
			s += '-';
		}
		s += 'r';
	}
	return s;
};
myCat.get_name = function () {
	return this.says + ' ' + this.name + ' ' + this.says;
};

4.函数化

以前的继承模式的弱点就是无法保护隐私。 这里来一个函数化构造器的伪代码模板。.net

<!-- lang: js -->
var constructor = function (spec, my) {
var that,其余的私有实例变量;
my = my || {};

把共享的变量和函数添加到my中

that = 一个新对象

添加给 that 的特权方法

return that;
};

让咱们把这个模式应用到mammal的例子里。此处不须要my。 name和saying属性如今是彻底私有的。只有经过get_name和says两个特权方法才能够访问他们。prototype

<!-- lang: js -->
var mammal = function (spac) {
var that = {};

that.get_name = function () {
	return spac.name;
};
that.says = function () {
	return spec.saying || '';
};

return that;
};

var myMammal = mammal({name : 'Herb'});

在伪类模式里,构造器函数Cat不得不重复构造器Mammal已完成的工做(这句话理解不能 TT)。在函数化模式中那再也不须要了,由于构造器Cat会调用构造器Mammal,让Mammal去作对象建立中的大部分工做,因此Cat只需关注自身的差别便可。code

5.部件(hard)

相关文章
相关标签/搜索