123 instanceof Number;//false,要左边是对象右边是函数
typeof 123 ; //number
new Number(123) instanceof Number; //true function F(){};
var f = new F();
f instanceof F ; //true
f instanceof Object ; //true //创建父类
//创建子类
//建立关系
function P () {}
function C(){}
//1.继承,P是父C是子
C.prototype = P.prototype;// C使用P的公有区域
C.prototype.constructor;// function P ()
var c1 = new C();
c1 instanceof C;//true
c1 instanceof P ;//true
C.prototype.xxx = "xxx";//给C增加属性
c1.xxx;//"xxx",首先去c1自己里面去找,没有找到,就是原型对象里面去找。
var p1 = new P();
p1.xxx; //"xxx",父也可以使用子的东西了,所以这种方式强烈不推荐 //2.p是父c是子
C.prototype = new P();
var c1 = new C();
c1 instanceof C;//true
c1 instanceof P ;//true
C.prototype.xxx = "xxx";//给C增加属性
c1.xxx;//"xxx"
var p1 = new P();
p1.xxx; //undefined,父类不可以使用子类的东西了,缺点是平白无故new了一个P(),增加了内存,不推荐 //3. 推荐写法
/*
function F();
F.prototype = P.prototype;
var f = new F();
C.prototype = f; //C的prototype指向一个对象,这个对象所在函数的prototype等于父类函数的prototype
*/
C.prototype = Object.create(P.prototype);
C.prototype;//Object{},create()方法实现了继承,但是原型对象没有修正 ============================================================
function Person(name,age){//父类
this.name = name;
this.age = age;//这些属性是变量各自都有的,各自修改互不影响,
}
Person.prototype.headCount = 1;//父类的原型的属性,这跟java对应不上,
Person.prototype.eat = function() {//父类的原型的方法
console.log("eating...");
}; function Programmer(name,age,title){//子类
Person.apply(this,arguments); }
Programmer.prototype.language = "javascript";
Programmer.prototype.work = function(){
console.log("i am writing code in " + this.language);//this是对象,可以访问原型里面的属性
}
Programmer.prototype = Object.create(Person.prototype); //Programmer继承了Person
Programmer.prototype.constructor = Programmer; var java = new Programmer();
java.eat();//eating...
java.language;//undefined,Programmer.prototype = Object.create(Person.prototype); 把Programmer的原型全部改了,之前写的原型里面的属性没了,所以之前写的原型的代码(Programmer.prototype.language,Programmer.prototype.work)要写到后面来, Programmer.prototype.language = "javascript";
Programmer.prototype.work = function(){
console.log("i am writing code in " + this.language);//this是对象,可以访问原型里面的属性
}
java.language;//javascript ==========================================================================
function Person(name,age){//父类
this.name = name;
this.age = age;
}
Person.prototype.headCount = 1;
Person.prototype.eat = function() {
console.log("eating...");
};
function Programmer(name,age,title){
Person.apply(this,arguments);//让Programmer拥有name,age属性 }
//继承
createEx(Programmer,Person); Programmer.prototype.language = "javascript";
Programmer.prototype.work = function(){
console.log("i am writing code in " + this.language);
Programmer.base.eat();
} function createEx(Child,Parent){
function F(){};//创建一个函数作为中间的桥接
F.prototype = Parent.prototype;
Child.prototype = new F();
Child.prototype.constructor = Child;
Child.super = Child.base = Parent.prototype;
}
var java = new Programmer();
java.headCount;//
java.work();// am writing code in javascript var person = new Person("cj",22);
person.name;//cj
var p = new Programmer("dacid",33,"ddd");
p.name;//david
person.name = "xxx";
p.name;//dacid , 父类子类对象的相同属性不影响 ,函数的嵌套好像不会产生继承,只是闭包有继承。

第一,子类调用call方法,第二子类原型对象的构造函数要改变,第三子类原型对象新增属性要写在creat之后,因为creat之后子类才有了原型对象。

//js里面的复制也是继承,深拷贝浅拷贝问题,应为复制过来以后可以自己加
/*js里面的构造器函数和原型prototype共同形成了类。
var f = new F(); 这一步只是把F函数里面的属性this.name、this.age变成了F函数对象的实例成员,使得每一个对象都有name、age属性。
f.__proto__ = F.prototype = Parent.prototype;才有继承了。 //js的继承就是要函数的原型建立关系。

js---16继承的更多相关文章

  1. js各种继承方式和优缺点的介绍

    js各种继承方式和优缺点的介绍 作者: default 参考网址2 写在前面 本文讲解JavaScript各种继承方式和优缺点. 注意: 跟<JavaScript深入之创建对象>一样,更像 ...

  2. JS对象继承篇

    JS对象继承篇 ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 原型链 其基本思路是利用原型让一个引用类型继承另一个引用类型的属性和方法 function Person() ...

  3. js实现继承的5种方式 (笔记)

    js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...

  4. js实现继承的方式总结

    js实现继承的5种方式 以下 均为 ES5 的写法: js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承 ...

  5. 【09-23】js原型继承学习笔记

    js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...

  6. js实现继承的两种方式

    这是面试时面试官会经常问到问题: js的继承方式大致可分为两种:对象冒充和原型方式: 一.先说对象冒充,又可分为3种:临时属性方式.call().apply(): 1.临时属性方式: 当构造对象son ...

  7. js实现继承

    js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...

  8. 浅谈JS的继承

    JS继承 继承是OO语言中最为人津津乐道的概念,许多OO语言都支持两种方式的继承:接口继承:实现继承. 接口继承:只继承方法签名. 实现继承:继承实际的方法. 由于ES里函数没有签名,所以在ES里面无 ...

  9. JS类继承常用方式发展史

    JS类继承常用方式发展史 涉及知识点 构造函数方式继承 1-继承单个对象 1.1 多步走初始版 1.2 多步走优化版 1.3 Object.create()方式 2-继承多个对象 2.1 遍历 Obj ...

  10. js实现继承的5种方式

    js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明确的继承机制,而是通过模仿实现的,根据js语言的本身的特性,js实现继承有以下通用的几种方式1.使用对象冒充实现继承(该种实现 ...

随机推荐

  1. springboot 测试类,项目使用shiro时报错UnavailableSecurityManagerException

    大概的问题就是,正常运行项目是没有问题的 使用测试类是,加载不了shiro的securityManager,主要导致不是很清楚,望告知, 解决方法 @Resource org.apache.shiro ...

  2. hive安装用mysql作为元数据库,mysql的设置

    mysql的设置 在要作为元数据库的mysql服务器上建立hive数据库: #建立数据库 create database if not exists hive; #设置远程登录的权限 GRANT AL ...

  3. Kali linux 2016.2(Rolling)中metasploit的搜集特定地址的邮件地址

    不多说,直接上干货! 使用search_email_collector搜集特定地址的邮件地址 search_email_collector 要求提供一个邮箱后缀,通过多个搜索引擎的查询结果分析使用此后 ...

  4. 搭建Hadoop的全分布模式

    此教程仅供参考 注意:此文档目的是为了本人方便以后复习,不适合当教程,以免误导萌新... 1.安装三台Linux2.在每台机器上安装JDK3.配置每台机器的免密码登录 (*) 生成每台机器的公钥和私钥 ...

  5. IT男送什么礼物给女朋友呢?

    每到各种节日,加班到吐血的IT男们,总是没什么时间准备礼物给女朋友,偶尔想起又不知道送什么的好,女朋友虽然心里不说,多少有些难过.现在推荐朋友的羊毛毡手工店,每一件都是亲手制作,特别是可以个性定制,女 ...

  6. ReactiveCocoa 中 RACSignal 是如何发送信号的

    https://juejin.im/post/5829f4c3570c350063c436ac 前言 ReactiveCocoa是一个(第一个?)将函数响应式编程范例带入Objective-C的开源库 ...

  7. 记录一次Permission denied解决过程

    热烈推荐:超多IT资源,尽在798资源网 朋友网站碰到一个奇怪的问题,程序所在目录无法进行上传操作. 具体细节是这样的:网站所在目录 /www/web/xiangmua 路径下,/www/web 都可 ...

  8. [洛谷P1343]地震逃生

    题目大意:有n个点m条单向边,每条边有一个容量.现有x人要分批从1走到n,问每批最多能走多少人,分几批运完(或输出无法运完). 解题思路:一看就是网络流的题目.每批最多能走多少人,即最大流.分几批运完 ...

  9. numpy基础篇-简单入门教程2

    import numpy as np Array 数组 print(np.zeros((2, 2))) # [[0. 0.] [0. 0.]] print(np.ones((2, 2))) # [[1 ...

  10. 洛谷P2196 && caioj 1415 动态规划6:挖地雷

    没看出来动规怎么做,看到n <= 20,直接一波暴搜,过了. #include<cstdio> #include<cstring> #include<algorit ...