<JavaScript> 寄生继承详解
// 将原型继承和非原型继承组合为一体的继承方式叫做组合继承,但是这种方法的继承是有一点小缺陷的,下级函数继承了无用的属性,所以我们有了寄生继承来解决污染问题;
//创建上级构造函数-食物
function Food(name, hot, taste){
this.name = name;
this.hot = hot;
this.taste = taste;
}
//为了清楚的注释过程,我们分开写上级构造函数的原型方法-变质
Food.prototype.bad = function(){
console.log("保质期3天");
};
//创建下级构造函数-面包
function Bread(name, hot, taste, brand){
//这里是借用上级函数的静态属性,也叫非原型继承
Food.apply(this, arguments);
//自己的属性
this.brand = brand;
}
//创建一个空的函数
var fn = function(){};
//将空函数原型替换为上层函数的原型,这样的空函数没有了私有属性,而且原型吃的还是人家的是不是和寄生虫一样呢?
fn.prototype = Food.prototype;
//使用空函数实例赋值给下级函数原型,这样有回到了我们的原型继承,这次继承的是fn的原型,很干净
Bread.prototype = new fn();
//当然还原constructor还是必须的,但是这里不能写 read.constructor = Bread 因为Bread.constructor是 Function () {};
Bread.prototype.constructor = Bread;
//下面创建下级函数自己的原型方法,值得注意的是扩展自身原型之前完成继承,不然会有覆盖问题
Bread.prototype.dry = function(){
console.log("一天不吃咬不动了!");
}
//下面我们可以有下级元素创建实例测试了
var bread = new Bread("脏脏包", "1000k", "sweet", "golden phinex");
<JavaScript> 寄生继承详解的更多相关文章
- JavaScript 面向对象继承详解
题记 由于js不像java那样是完全面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现继承,一般都是基于原型链的方式: 一.继承初探 大多数JavaScript的实现用 __proto_ ...
- javascript对象继承详解
问题 比如我们有一个"动物"对象的构造函数. function animal() { this.type = '动物'; } 还有一个"猫"对象的构造函数. f ...
- [原创]JavaScript继承详解
原文链接:http://www.cnblogs.com/sanshi/archive/2009/07/08/1519036.html 面向对象与基于对象 几乎每个开发人员都有面向对象语言(比如C++. ...
- 从mixin到new和prototype:Javascript原型机制详解
从mixin到new和prototype:Javascript原型机制详解 这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...
- JavaScript数组方法详解
JavaScript数组方法详解 JavaScript中数组的方法种类众多,在ES3-ES7不同版本时期都有新方法:并且数组的方法还有原型方法和从object继承的方法,这里我们只介绍数组在每个版本中 ...
- JavaScript严格模式详解
转载自阮一峰的博客 Javascript 严格模式详解 作者: 阮一峰 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict m ...
- [转]javascript console 函数详解 js开发调试的利器
javascript console 函数详解 js开发调试的利器 分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...
- javascript 节点属性详解
javascript 节点属性详解 根据 DOM,html 文档中的每个成分都是一个节点 DOM 是这样规定的:整个文档是一个文档节点每个 html 标签是一个元素节点包含在于 html 元素中的文本 ...
- (" use strict")Javascript 严格模式详解
Javascript 严格模式详解 转载别人的博客内容,浏览了一遍,没有全部吸收,先保存一下链接 http://www.ruanyifeng.com/blog/2013/01/javascript_s ...
随机推荐
- 配置Python、Django环境变量教程
配置环境变量 在Windows下你必须配置环境变量! 右击桌面或者你能看到的任何 此电脑.这台电脑或者我的电脑. 右击:属性 点击:高级系统设置 点击:环境变量 找到系统变量下的Path,双击 点击新 ...
- c# Format() 方法
- Linux下zookeeper集群搭建
Linux下zookeeper集群搭建 部署前准备 下载zookeeper的安装包 http://zookeeper.apache.org/releases.html 我下载的版本是zookeeper ...
- 【枚举】【lrj黑书】奇怪的问题(古老的智力题)
题目描述: 请回答下面的 10 个问题,你的回答应保证每题惟有你的选择是正确的. ⑴ 第一个答案是b 的问题是哪一个?(a )2 ( b ) 3 ( c ) 4 ( d ) 5 ( e ) 6⑵ 恰好 ...
- PAT Advanced 1140 Look-and-say Sequence (20 分)
Look-and-say sequence is a sequence of integers as the following: D, D1, D111, D113, D11231, D112213 ...
- layer学习
layer版本v2.1 1,layer的alert可以传标题的: layer.alert("测试layer弹窗===========", {title:"温馨提示&quo ...
- HDU 6568 Math
Math \(f_i\)为从\(i\)到\(i+1\)的期望步数. \(f_i = 1-p + p(f_i + 2((1-q)^{n-i}(n-i) + q\sum_{j=0}^{n-i-1}(1-q ...
- 原生JS发送Ajax请求、JSONP
一.JS原生Ajax Ajax=异步Javascript+XML: ajax是一种数据请求的方式,不需要刷新整个页面.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. ajax的核心 ...
- email.py
import os import argparse import yaml import smtplib import csv from email.mime.multipart import MIM ...
- paramiko多线程远程执行命令
import paramiko import sys import getpass import threading import os def rcmd(host=None, port=22, us ...