主要就是《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的更多相关文章

  1. 一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class extends

    说实在话,以前我只需要知道"寄生组合继承"是最好的,有个祖传代码模版用就行.最近因为一些事情,几个星期以来一直心心念念想整理出来.本文以<JavaScript高级程序设计&g ...

  2. JS继承的一些见解

    JS继承的一些见解 js在es6之前的继承是五花八门的.而且要在项目中灵活运用面向对象写法也是有点别扭,更多的时候还是觉得面向过程的写法更为简单,效率也高.久而久之对js的继承每隔一段时间就会理解出现 ...

  3. JS继承的原理、方式和应用

    概要: 一.继承的原理 二.继承的几种方式 三.继承的应用场景 什么是继承? 继承:子类可以使用父类的所有功能,并且对这些功能进行扩展.继承的过程,就是从一般到特殊的过程.要了解JS继承必须首先要了解 ...

  4. JS继承(简单理解版)

    童鞋们,我们今天聊聊js的继承,关于继承,平时开发基本用不到,但是面试没有不考的,我就想问,这是人干的事吗? 好吧,迫于社会主义核心价值观,我们今天就来简单说一说js的继承,谁让它是面向对象编程很重要 ...

  5. 让我们纯手写一个js继承吧

    继承在前端逻辑操作中是比较常见的,今天我们就从零开始写一个js的继承方式 在es5中继承实质上是先创建子类的实例对象,然后再将父类的方法添加到this上Parent.call(this),在es6中则 ...

  6. 面向对象第二个特征-继承(Inheritance)

    面向对象第二个特征-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.java中的继承概述 1>.继承概述 多个类种存在相同属性和行为时,讲这 ...

  7. 简单易懂的JS继承图解

    JS继承的实现方式一共有八种.下面我们来一个一个瞅一下.注意️:文章依据个人理解,难免有问题,还望各位及时指出!!!!! 原型链继承 借用构造函数继承 组合继承 原型式继承 寄生继承 寄生组合式继承 ...

  8. 关于JS继承

    关于JS继承 关于继承这个概念,是由面向对象衍生出来的.而JS身为一种基于面向对象而设计的语言,它和正统的面向对象语言又是有差别的. 面向对象语言 身为面向对象语言需要对开发者提供四种能力: ①:封装 ...

  9. js继承

    js继承有5种实现方式: 继承第一种方式:对象冒充 function Parent(username){ this.username = username; this.hello = function ...

随机推荐

  1. js将数组元素随机排序的方法

    在群里看见的一个面试题,试了一下,还是可以做出来的,但是需要查资料,主要是岁一些方法了解的不清楚,可能这个跟我平时不太注重基础理论有关系,像什么构造函数啊,我根本就不关心什么叫构造函数,我一直都以为我 ...

  2. MSChart BarChart

    不让合并0-5 chart1.ChartAreas[].AxisX.LabelStyle.Interval = ; 效果

  3. 不小心删除数据--利用MySQL的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  4. 【CC评网】2013.第41周 不求排版,简单就好

    书单 碰上国庆,加上这周,消化掉几本书: <软件随想录>:Joel的随想录,也就是他Blog上的文章的摘选:整本书看下来轻松:写了篇读书笔记[传送门]: <中国在梁庄>:这本书 ...

  5. 多线程处理sql server2008出现Transaction (Process ID) was deadlocked on lock resources with another process and has been chose问题

    多线程处理sql server2008某个表中的数据时,在Update记录的时候出现了[Transaction (Process ID 146) was deadlocked on lock reso ...

  6. jQuery mobile 前台设计中的css em的使用。

    先贴个网址:http://www.uml.org.cn/html/201207311.asp 大家可以参考一下面这张转换表(body字体为16px时的值) 总结 长篇介绍了一大堆,唯一想告诉大家的是以 ...

  7. c 字符串常用函数

    #include <iostream> #include <stdio.h> #include <vector> #include "string.h&q ...

  8. [转载] 每个 Python 程序员都要知道的日志实践

    原文: http://python.jobbole.com/81666/ 在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果 ...

  9. Oracle正则表达式函数:regexp_like、regexp_substr、regexp_instr、regexp_replace

    Oracle正则表达式函数:regexp_like.regexp_substr.regexp_instr.regexp_replace   --去掉所有特殊字符,只剩字母  SELECT REGEXP ...

  10. Java JDBC连接数据库 Access连接数据库

    1.加载JDBC驱动程序:  在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),再通过java.lang.Class类的静态方法forName(String  classN ...