`
truth99
  • 浏览: 63690 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

javascript 精粹第三篇(继承)

阅读更多

下面代码要用到之前博客中的代码,在执行的时候请将其中的代码引入,否则报错。

/*******************************************************************************
 * 继承
 *******************************************************************************/
console.log('************************************************************************伪类');
//当一个函数对象被创建时,Function构造器产生的函数对象会运行类似这样的一些代码:
//         this.prototype = {constructor : this}
//新函数对象被赋予一个prototype属性,它的值是一个包含constructor属性且属性值为该新函数的对象。
//这个prototype对象是存放继承特性的地方,constructor属性没什么用,重要的是prototype对象。

//采用构造函数调用模式
var Mammal = function(name){
	this.name = name || '';
};
Mammal.prototype.get_name = function(){
	console.log('ssss');
	return this.name;
};

Mammal.prototype.says = function(){
	return this.saying || '';
};

var myMammal = new Mammal("truth");
console.log(myMammal.get_name());

//构造另一个伪类来继承Mammal
//var Cat = function(name){
//	this.name = name;
//	this.saying = 'meow';
//};
//替换Cat.prototype 为一个新的Mammal实例。
//Cat.prototype = new Mammal();
//伪类模式本意是想向面向对象靠拢,但它看起来格格不入,我们可以隐藏一些丑陋的细节,
//通过使用method方法来定义一个extend方法实现。

Function.method('extend',function(Parent){
	this.prototype = new Parent();
	return this;
});

var Cat = function(name){
	this.name = name;
	this.saying = 'meow';
};
Cat.extend(Mammal)
.method('get_name2',function(){
	return this.name+':'+this.saying;
});
//这个get_name方法没有创建成功,因为在定义这个method方法体时,不允许创建同名的方法。
//改成其他名称就好了
var myCat = new Cat('Henrietta');
console.log(myCat);
console.log(myCat.says());
console.log(myCat.get_name2());


console.log('************************************************************************函数化');
var mammal = function(spec){
	var that = {};
	that.get_name = function(){
		return spec.name;
	};
	that.says = function(){
		return spec.saying || '';
	};
	return that;
};
//个人理解:将变量放到spec中后变成私有变量,其他对象访问不到。
//因为在mammal对象中没有name属性,所以只能通过get_name()方法获取。

var cat = function(spec){
	spec.saying = spec.saying || 'meow';
	var that = mammal(spec);
	that.get_name = function(){
		return that.says() +' '+ spec.name +' '+ that.says();
	};
	return that;
};
var myCat2 = cat({name:'Henrietta'});
console.log(myCat2.get_name());

Object.method('superior',function(func_name){
	console.log(this);
	var that = this;
	method = that[func_name];
	return function(){
		return method.apply(that,arguments);
	};
});
var coolCat = function(spec){
	var that = cat(spec);
	//因为没有name属性,所以只能调用方法来获取name值。
	super_get_name = that.superior('get_name');
//	super_get_name = that.get_name();
	that.get_name = function(){
		return 'like ' + super_get_name + ' baby';
	};
	return that;
};
var myCoolCat = coolCat({name : 'Bix'});
console.log(myCoolCat.get_name());


未完...见javascript 精粹第四篇(数组)
分享到:
评论

相关推荐

    javascript精粹(源代码).rar

    《JavaScript精粹》一书深入浅出地探讨了这种语言的核心概念和技术,旨在帮助读者掌握JavaScript的魅力并提升编程技能。书中源代码的提供使得理论与实践相结合,加深了学习的体验。 1. **变量和数据类型**:...

    JavaScript语言精粹.修订版---高清版.pdf

    2. **原型继承**:不同于传统的类继承模型,JavaScript使用原型继承。每个对象都有一个内部属性[[Prototype]]指向另一个对象,形成了一个原型链。 3. **异步编程**:随着Web应用复杂度的增加,JavaScript引入了多种...

    JavaScript(ppk谈JavaScript+JavaScript语言精粹修订+Secrets of the JavaScript Ninja)

    “JavaScript语言精粹(修订版)”可能是Douglas Crockford的著作,他是一位JavaScript的先驱者,对语言的某些部分进行了深入探讨,特别是关于代码风格、最佳实践和设计模式。这本书强调了JavaScript的精华部分,...

    JavaScript语言精粹3

    - npm 与包管理:安装、发布、更新第三方模块。 2. **Express框架**: - Express 的路由机制与中间件系统。 - 使用 Express 构建 RESTful API 服务。 - 错误处理与日志记录的最佳实践。 3. **数据库集成**: ...

    JavaScript语言精粹_修订版

    3. **原型与继承**:JavaScript采用基于原型的继承模型,对象可以通过原型链共享属性和方法。Object.prototype是所有对象的根源,通过__proto__属性或Object.getPrototypeOf方法可访问原型。ES6引入了类和class...

    JavaScript语言精粹

    第3章 对象  3.1 对象字面量  3.2 检索  3.3 更新  3.4 引用  3.5 原型  3.6 反射  3.7 枚举  3.8 删除  3.9 减少全局变量污染 第4章 函数  4.1 函数对象  4.2 函数字面量  4.3 调用  4.4 ...

    js-高性能JavaScript-JavaScript语言精粹修订版

    #### 二、《JavaScript语言精粹(修订版)》 **知识点概述:** 1. **基础语法:** - 熟悉变量声明、数据类型和运算符。 - 掌握函数定义和调用的基本规则。 2. **面向对象编程:** - 了解JavaScript的原型链...

    JavaScript语言精粹(修订版)

    2. **函数与闭包**:函数是JavaScript中的第一等公民,可以作为值传递,也可以作为参数和返回值。闭包是JavaScript的一个重要特性,它允许函数访问并操作外部作用域的变量,即使该函数在其外部作用域已经执行完毕。 ...

    JavaScript语言精粹(中文版)part1

    第3章:对象 第4章:函数 第5章:继承 第6章:数组 第7章:正则表达式 第8章:方法 第9章:代码风格 第10章:优美的特性 附录A:糟粕 附录B:鸡肋 附录C:JSlint 附录D:语法图 附录E:JSON 索引

    JavaScript语言精粹(中文版PDF)part2

    第3章:对象 第4章:函数 第5章:继承 第6章:数组 第7章:正则表达式 第8章:方法 第9章:代码风格 第10章:优美的特性 附录A:糟粕 附录B:鸡肋 附录C:JSlint 附录D:语法图 附录E:JSON 索引

    js语言精粹_holdtqj_js语言精粹_书_

    2. **函数**:JavaScript中的函数不仅是可调用的代码块,还是第一类对象,可以作为参数传递,也可以作为返回值。Crockford深入解析了函数的特性,特别是匿名函数、自执行函数和函数表达式。 3. **作用域和闭包**:...

Global site tag (gtag.js) - Google Analytics