5、差异继承

继承意味着复制操作;

差异继承:

基本原则是在描述对象行为时,使用其不同于普遍描述的特制。 (我的理解是只用对象自身的而不用普遍继承的像是toString(),valueOf()这种方法)

6、(原型) 继承

    function Foo(name){
this.name = name;
}
Foo.prototype.myName = function(){
return this.name
}
function Bar(name,label){
//用call将name混合继承
Foo.call(this,name);
this.label = label;
}
//真正关联起来
Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.myLabel = function(){
return this.label;
}
var a = new Bar('a','obj a');
a.myName();//a
a.myLabel();// obj a

此时Bar.prototype是:

Foo.prototype是:

这段代码的核心部分就是Bar.prototype = Object.create(Foo.prototype);调用Object.create()会凭空创建一个“新”对象并把新对象内部的[[Prototype]]关联到指定的对象(Foo.prototype)

两种方法可以将Bar.prototype关联到Foo.prototype,上面说的是第一种。

Es6提供了另一种方法: Object.setPrototypeOf(Bar.prototype,Foo.prototype)

7、检查“类”关系

1、instanceof 谁是谁的实例吗?返回结果为true/false

instanceof 回答的是:在a的整条[[Prototype]]链中是否有Foo.prototype指向的对象

    function Foo(){
...
}
Foo.prototype.blah = ...
var a = new Foo();
a instanceof Foo;//true

2、Foo.prototype.isPrototypeOf(a);

isPrototypeOf()回答的是:在a的整条[[Prototype]]链中是否出现过Foo.prototype?

 var b = {};
var a = {};
b.isPrototypeOf(a);//false b的原型链中没有出现过a.Prototype

8、对象关联

原型链:如果在对象上没有找到需要的属性或者方法引用,引擎就会继续在[[Prototype]]关联的对象上进行查找,同理,如果后者中也没有找到需要的引用就回继续查找它的[[Prototype]],以此类推。这一系列对象的链接称为“原型链”

创建关联:

上面提到过两种方法:

Object.create()

Object.setPrototype()(Es6新增)

但是Object.create()是es5中新增的,需要做兼容判断:

    if(!Object.create){
Object.create = function(o){
function F(){}
F.prototype = o;
return new F();
}
}

你不知道的JavasScript上篇·第五章·原型·下的更多相关文章

  1. 你不知道的JavasScript上篇·第五章·原型·上

    1.[[Prototype]] JS中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用.几乎所有的对象在创建时这个属性都被赋予一个非空的值 (proto) var my ...

  2. 你不知道的JavasScript上篇·第四章·混合对象·类

    一.类的理论 1.类的核心概念:多态 是说父类的通用行为可以被子类用更特殊的行为重写 二.类的机制 1.构造函数 类实例是有一个特殊的类方法构造的,这个方法名通常和类名一致: 类构造函数属于类,构造函 ...

  3. 你不知道的JavasScript上篇·第三章·对象

    1.Object.defineProperty()&&getter.setter Object.defineProperty(目标对象,属性名(string型),{ get:funct ...

  4. 《Python基础教程》 读书笔记 第五章(下)循环语句

    5.5.1while循环 x=1 while x<=100: print x x+=1 确保用户输入了名字: name="" while not name: name=raw ...

  5. Intel汇编语言程序设计学习-第五章 过程-下

    5.3.3  库测试程序 测试程序#1:整数I/O 该测试程序把输出文本的颜色改为蓝底黄字,然后以十六进制数显示七个数组的内容,最后提示用户输入一个有符号整数,再分别以十进制.十六进制和二进制格式重复 ...

  6. Vue2.5开发去哪儿网App 第五章笔记 下

    1. 多个元素或组件的过渡 多个元素的过渡: <style> .v-enter,.v-leace-to{ opacity: 0; } .v-enter-active,.v-leave-ac ...

  7. UNIX 网络编程第五章读书笔记

    刚看完 UNIX 第五章内容,我想按照自己的方式将自己获得的知识梳理一遍,以便日后查看!先贴上一段简单的 TCP 服务器端代码: #include <sys/socket.h> #incl ...

  8. 【原创】构建高性能ASP.NET站点 第五章—性能调优综述(后篇)

    原文:[原创]构建高性能ASP.NET站点 第五章-性能调优综述(后篇) 构建高性能ASP.NET站点 第五章—性能调优综述(后篇) 前言:本篇主要讲述如何根据一些简单的工具和简单的现象来粗布的定位站 ...

  9. 第五章 JavaScript对象及初识面向对象

    第五章   JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...

随机推荐

  1. Spring Boot日志管理

    SpringBoot内部使用Commons Logging来记录日志,但是默认也提供了对常用日志组件的支持,如:Log4j,Logback等.每种Logger都可以通过配置使用控制台或者文件输出日志内 ...

  2. flask开发的CMS管理系统

    Dohoom 详细介绍 Dohoom 基于Python3 Flask +Mysql+ Redis开发的一个Web系统 可用于搭建(开发)个人网站, 企业官网.包含:相册模块,文章模块,小组模块,私信模 ...

  3. String不得不说的那些事

    一.String.StringBuilder和StringBuffer的区别 1. String是字符串常量,StringBuilder和StringBuffer是字符串变量 String对象创建完成 ...

  4. python解析json数据

    现在的API接口多为xml或json,json解析更简洁相对xml来说 以豆瓣的API接口为例,解析返回的json数据: https://api.douban.com/v2/book/1220562 ...

  5. C++:复制构造函数

    关于复制构造函数的具体细节:浅层复制和深层复制等可以看下 范磊老师的<零起点学通C++>视频教程和<C++ Primer Plus>一书. 相信看完后,对复制构造函数能基本掌握 ...

  6. TCP 流量控制、拥塞控制

    流量控制: 流量控制是为了控制发送方发送速率,保证接收方来得接收. 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率.将窗口字段设置为 0,则发送方不能发送数据. ...

  7. vuejs之Vue Devtools

    Vue Devtools大法好 这是一篇小白friendly教程 Vue Devtools是一款谷歌浏览器插件,专门为调试vue而设计.假设你做了一个vue应用,当你在调试的过程中,打开的控制台是这样 ...

  8. vuex详细介绍和使用方法

    1.什么是vuex? 官方的解释: Vuex是一个专为Vue.js应用程序开发的状态管理模式 当项目比较庞大的时候,每个组件的状态比较多,为了方便管理,需要把组件中的状态抽取出来,放入Vuex中进行统 ...

  9. Solidity的delete操作

    Solidity中有个特殊的操作符delete用于释放空间,因为区块链技术做为一种公用资源,为避免大家滥用.且鼓励主动对空间的回收,释放空间将会返还一些gas. delete关键字的作用是对某个类型值 ...

  10. 百度前端技术学院-task1.8源代码以及个人总结

    通过这次任务的练习我学到了很多,现将所学到的以及遇到的问题总结如下. 源码地址:http://pan.baidu.com/s/1kVB2VZL 下面出现的代码,都是摘自这个上面的源码 1.终于明白了a ...