js 继承inheritance/extends

主要就是《javascript语言精粹》语言精粹中的内容
5.1伪类
Function.prototype.method = function(name,func){ this.prototype[name] = func; return this; }
var Cat = function(name){
this.name = name;
this.saying = "meow";
}
Cat.prototype = new Mammal();
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("bubu");
var says = myCat.says();
var purr = myCat.purr(5);
var name = myCat.get_name();
console.log(says , purr , name);
伪类模式本意是想向面向对象靠拢,我们可以隐藏一些丑陋的细节,这是通过使用method方法定义一个inherits方法来实现的
Function.prototype.method = function(name,func){
this.prototype[name] = func;
return this;
}
Function.method('inherits',function(Parent){
this.prototype = new Parent();
return this;
})
var Cat = function(name){
this.name = name;
this.saying = "meow";
}.
inherits(Mammal).
method("purr",function(n){
var i,s = "";
for(i = 0 ; i < n ; i+=1){
if(s){
s += "-";
}
s += "r";
}
return s;
}).
method("get_name",function(){
return this.says() + " " + this.name + " " + this.says();
});
var myCat = new Cat("bubu");
var says = myCat.says();
var purr = myCat.purr(5);
var name = myCat.get_name();
console.log(says , purr , name);
我们现在有了行为像“类”的构造器函数,但是他们可能有着令人惊讶的行为:没有私有环境;所谓的属性都是公开的。无法访问super(父类)的方法
更糟的是,使用构造器函数存在一个严重的危害。如果你在调用构造器函数时忘记在前面加上new 前缀,那么this将不会绑定到一个新对象上。更可悲的是,this将绑定到全局对象上,所以不精没有扩充新对象,反而将破坏全局变量。
伪类给不熟悉js的程序员提供了便利,但是它也隐藏了该语言的真实本质。许多复杂的类层次结构产生的原因是静态类型检查的约束。js完全摆脱了那些约束。在基于类的语言中,类的继承是代码重用的唯一方式。js有更好的选择。
js 继承inheritance/extends的更多相关文章
- 一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends
说实在话,以前我只需要知道"寄生组合继承"是最好的,有个祖传代码模版用就行.最近因为一些事情,几个星期以来一直心心念念想整理出来.本文以<JavaScript高级程序设计&g ...
- JS继承的一些见解
JS继承的一些见解 js在es6之前的继承是五花八门的.而且要在项目中灵活运用面向对象写法也是有点别扭,更多的时候还是觉得面向过程的写法更为简单,效率也高.久而久之对js的继承每隔一段时间就会理解出现 ...
- JS继承的原理、方式和应用
概要: 一.继承的原理 二.继承的几种方式 三.继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展.继承的过程,就是从一般到特殊的过程.要了解JS继承必须首先要了解 ...
- JS继承(简单理解版)
童鞋们,我们今天聊聊js的继承,关于继承,平时开发基本用不到,但是面试没有不考的,我就想问,这是人干的事吗? 好吧,迫于社会主义核心价值观,我们今天就来简单说一说js的继承,谁让它是面向对象编程很重要 ...
- 让我们纯手写一个js继承吧
继承在前端逻辑操作中是比较常见的,今天我们就从零开始写一个js的继承方式 在es5中继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上Parent.call(this),在es6中则 ...
- 面向对象第二个特征-继承(Inheritance)
面向对象第二个特征-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java中的继承概述 1>.继承概述 多个类种存在相同属性和行为时,讲这 ...
- 简单易懂的JS继承图解
JS继承的实现方式一共有八种.下面我们来一个一个瞅一下.注意️:文章依据个人理解,难免有问题,还望各位及时指出!!!!! 原型链继承 借用构造函数继承 组合继承 原型式继承 寄生继承 寄生组合式继承 ...
- 关于JS继承
关于JS继承 关于继承这个概念,是由面向对象衍生出来的.而JS身为一种基于面向对象而设计的语言,它和正统的面向对象语言又是有差别的. 面向对象语言 身为面向对象语言需要对开发者提供四种能力: ①:封装 ...
- js继承
js继承有5种实现方式: 继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function ...
随机推荐
- 关于oracle sql developer乱码的问题
写了一个sql查询,我擦居然乱码了 然后双击下这个框,居然又是中文: 有谁能够告诉我这是什么鬼
- SpringMVC 配置过滤器解决中文乱码问题
<!-- 字符集过滤器 --> <filter> <filter-name>Charset</filter-name> ...
- [SAP ABAP开发技术总结]选择屏幕——PARAMETERS
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- CUBRID学习笔记 28 执行sql脚本文件
一下命令在csql下执行. insert_commands.sql为sql脚本文件 ;CL ;READ insert_commands.sql ;RU 第一行的cl 清空命令缓存,等同clear第二行 ...
- 笔记本_thinkpad_e40_FN
1. 开机时按F10进入bios 然后在 bios 中选择 system configuration,看一下其中的 action keys mode .如果此选项后面为 enable 的话,是不需要按 ...
- JS 对象(Object)和字符串(String)互转
利用原生JSON对象,将对象转为字符串 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.date = ...
- JS作用域和预编译(转载 学习中。。。)
JS在页面加载过程中顺序执行.但是分块预编译.执行. JS在执行前会进行类似”预编译”的操作,而且先预声明变量再预定义函数. 此时注意,是声明,不是定义,如:var a = 1; 在预编译中,只是执行 ...
- 转:如何学习SQL(第二部分:从关系角度理解SQL)
转自:http://blog.163.com/mig3719@126/blog/static/285720652010950825538/ 6. 从关系角度理解SQL 6.1. 关系和表 众所周知,我 ...
- 转:为什么C++中空类和空结构体大小为1?
参考:http://www.spongeliu.com/260.html 为什么C++中空类和空结构体大小为1? On November 17, 2010, in C语言, 语言学习, by spon ...
- Spring 定时任务的配置
1.applicationContext.xml 中 加入task 的声明与xsd ? 1 xmlns:task="http://www.springframework.org/schema ...