开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
第5章 继承
- js是基于原型的语言,意味着对象直接从其他对象继承
伪类
- 通过构造器函数产生对象
this.prototype = { constructor: this };
- new 运算符方法
Function.method('new', function(){
// 创建一个新对象,它继承自构造器函数的原型对象
var that = Object.create(this.prototype);
// 调用构造器函数, 绑定 - this - 到新对象上
var other = this.apply(that, arguments);
// 如果它的返回值不是一个对象,就返回该新对象
return (typeof other === 'object' && other)|| that;
})
- 定义一个构造器并扩充它的原型
var Mammal = function(name){
this.name = name;
}
Mammal.prototype.get_name = function(){
return this.name;
}
Mammal.prototype.says = function(){
return this.saying || '';
}
- 构造一个实例
var myMammal = new Mammal('Herb the Mammal');
var name = myMammal.get_name(); // 'Herb the Mammal'
- 构造另一个伪类来继承 Mammal,通过定义它的constructor函数并替换它的prototype为一个Mammal的实例来实现
var Cat = function(name){
this.name = name;
this.saying = 'meow';
}
// 替换 Cat.prototype 为一个新的 Mammal 实例
Cat.prototype = new Mammal();
// 扩充新原型对象,增加 purr 和 get_name方法
Cat.prototype.purr = function(n){
var i , s = '';
for(i = 0;i < n; i+=1){
if(s){
s += '-';
}
s += 'r';
}
return s;
}
Cat.prototype.get_name = function(){
return this.says() + ' ' + this.name + ' ' + this.says();
}
var myCat = new Cat('Henrietta');
var says = myCat.says(); // 'meow';
var purr = myCat.purr(5); // 'r-r-r-r-r'
var name = myCat.get_name(); // 'meow Henrietta meow'
对象说明符
- 将要构建的对象规格说明
var myObject = maker(f,l,m,c,s)
var mybject = maker({
first: f,
middle: m,
last: l,
state: s,
city: c
})
原型
函数化
- 构造一个生成对象的函数
- 创建一个新对象
- 有选择的定义私有实例变量和方法
- 给这个新对象扩充方法
- 返回新对象
部件
- 可从部件中把对象组装出来,可构造一个给任何对象添加简单事件处理特性的函数,它会给对象添加on方法、fire方法和私有的事件注册表对象