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 ...
随机推荐
- SqlSever基础 select 用+号连接两个字符串
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 【leetcode❤python】237. Delete Node in a Linked List
#-*- coding: UTF-8 -*- # Definition for singly-linked list.# class ListNode(object):# def __init ...
- [SAP ABAP开发技术总结]BAPI调用
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- javascript权威指南笔记--javascript语言核心(五)--getter和setter属性
getter和setter属性: var p = { x:1.0, y:1.0, get r(){ return Math.sqrt(this.x*this.x + this.y * this.y); ...
- 图--DFS求连通块
The GeoSurvComp geologic survey company is responsible for detecting u ...
- C#中Monitor和Lock以及区别
Monitor对象 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...
- 详解公用表表达式(CTE)
简介 对于SELECT查询语句来说,通常情况下,为了使T-SQL代码更加简洁和可读,在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解的.但是,视图是作为系统对象存在数据库中,那对于结果集 ...
- input与select 设置相同宽高,在浏览器上却显示不一致,不整齐
遇到 input与select 设置相同宽高,在浏览器上却显示不一致,遂实验了下(IE 10.013 ,Firefox 30.0),得出以下结论 input width,height 值里面, 不 ...
- HDU 1754
成段更新 easy #include <stdio.h> #include <string.h> #include <math.h> #include <io ...
- [转载] 跟着实例学习zookeeper 的用法
原文: http://ifeve.com/zookeeper-curato-framework/ zookeeper 的原生客户端库过于底层, 用户为了使用 zookeeper需要编写大量的代码, 为 ...