`
truth99
  • 浏览: 62915 次
  • 性别: 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...

    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 索引

Global site tag (gtag.js) - Google Analytics