一、对象

 js中的基本数据类型分为:- 内置基本类型:number string  布尔 null undined;- 引用类型(对象):objectjs中万物皆为对象- 对象:String、Array、Date、Math、Json Function..- 函数对象:函数又分为普通函数,匿名函数,闭包函数- 普通函数: `function test(){console.log("普通函数");}test(); //控制台输出:普通函数`- 匿名函数:`var add = function (num1, num2) {console.log(num1+num2);}add(3,6);//控制台输出9`- 闭包函数(嵌套的函数):function funA() {var i = 0; //闭包函数funBreturn funB() {console.log(i++);}return funB;}

二、constructor、prototype、 __ proto__、

     function student(name){this.name = name;}student.prototype.sleep = function(){console.log("student sleep")}let t = new student(); —constructor:console.log(t.constructor);返回整个函数(类似outerHTml)-实例:t:用new调用构造函数test创建出来的对象。- 原型属性:prototype:函数类的属性 存放函数的方法- __proto__ :所有对象的实例属性

三、原型链

当访问一个实例对象的某个属性时,会先在这个对象本身属性上查找(name), 如果没有找到,则会去它的__proto__实例属性上查找,即它的构造函数的(prototype(sleep()),如果还没有找到就会 再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构

四、原型、原型链继承

 子类自动拥有父类的属性和方法, 继承可以提高代码的复用性。并且子类可以添加新的属性和方法JS里的继承主要依靠是的原型链。让原型对象(每一个构造函数都有一个原型对象)的值,等于另一个类型的实例,即实现了继承;另外一个类型的原型再指向第三个类型的实例,以此类推,也就形成了一个原型链原型链继承:让子对象的原型指向父对象的实例,父对象的原型指向爷爷       对象的实例,依次类推,就形成了原型链- 原型继承的缺点:1.无法在构造子类对象时,初始化父类派生的属性官方话: (1. 被继承的类型(父类)里包括引用类型的属性的时候,它会被所有实例共享其值2. 创建子类型的实例时,没法传参给被继承类型。)
//1. 先定义原型继承关系,再添加子类的自定义方法或属性(原型的属性,即共享的属性和方法要在原型继承关系确立后,再定义)。// 2. 利用原型链继承,给子类添加原型方法时,不可以重写prototype
function Animal(newName){this.name = newName;}Animal.prototype.eat = function(str){console.log(this.name + "吃" + str);}function Person(newId){this.id = newId;}//继承关系//用子类的原型对象的值=父类的实例化对象Person.prototype = new Animal("老王");let p1 = new Person("007");console.log(p1.name,p1.id);p1.name = "小明";p1.eat("米饭");let p2 = new Person("008");console.log(p2.name,p2.id);p1.name = "大明";p1.eat("水果");

五、apply和call “继承”
不足:1.无法继承父类原型上的属性和方法2.单独使用这种借用的模式,所有要继承的属性和方法都要在父类型的构造函数里定义,
特别是实例共享的属性和方法也写在构造函数里,那么这样会浪费内存。所以,很少很少单独使用
function Monkey(name){this.name = name;}function Snake(name){this.name = name;}function eat(f1,f2){console.log(this.name +"="+ f1 +":"+ f2);}let m = new Monkey("泰山");let s = new Snake("小青");//apply和call//目标函数.call(修改目标函数的this指向,目标函数真正的参数)eat.call(m,"香蕉","桃子");eat.apply(m,["桃子","香蕉"]);
六、混合继承
function Human(name,id){this.name = name;this.id = id;}Human.prototype.eat = function(){console.log("eat");}//原型继承:继承方法Student.prototype = new Human();function Student(score,name,id){// apply()和call()继承属性Human.call(this,name,id);this,score = score;}Student.prototype.study = function(){console.log("study");}let s = new Student("laowang","9527",100);console.log(s);s.study();s.eat();
七、es6继承
类似Java的继承class 子类 extends 父类{constructor(父参。。,自己的参数(name)){super(父参....)this.name = name;}test(){}}
class Human{constructor(name,id) {this.name = name;this.id = id;}eat(){console.log("eat");}}class Student extends Human{constructor(name,id,score) {super(name,id);this.score = score;}study(){console.log("study")}}let s = new Student("laowang","9537",100);console.log(s)s.eat()

原型和原型链,原型继承和原型链继承相关推荐

  1. JS中的继承与原型链

    对于原型我们通过[[prototype]].proto 以及 prototype 这三个概念理解其实现继承的思路. [[prototype]] 在 ECMAScript 标准中规定每个对象都有一个内置 ...

  2. 深入理解 js 之继承与原型链

    原型链与继承 当谈到继承时,JavaScript 只有一种结构:对象.每个实例对象(object )都有一个私有属性(称之为proto)指向它的原型对象(prototype).该原型对象也有一个自己的 ...

  3. 原型继承+原型链 + 对象继承发展

    一.原型继承: 1.说起原型继承,就要先由构造函数创造对象说起,首先了解构造函数内部基本原理: (1).在函数体最前面隐式的加上this = {} (2).执行 this.xxx = xxx; (3) ...

  4. 原型和原型链原型继承_原型还是不原型:这就是问题所在。

    原型和原型链原型继承 by Rishal Hurbans 由Rishal Hurbans 原型还是不原型:这就是问题所在. (To prototype or not to prototype: tha ...

  5. ES5常用的组合继承及原型链理解

    ES5常用的组合继承及原型链理解 <!DOCTYPE html> <html lang="en"><head><meta charset= ...

  6. js的继承和原型链(更新中)

    话不多说,直接上MDN链接 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_ ...

  7. js原型和原型链_初识JS原型/原型链/原型继承

    本文思路: 原型->原型链->原型继承->基于原型的继承/ES6中的继承->__proto__与prototype 首先我们知道JS中有对象,比如: var 但是在我们没有对这 ...

  8. JavaScript之继承(原型链)

    JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...

  9. JavaScript 设计模式学习第五篇-继承与原型链

    JavaScript 是一种灵活的语言,兼容并包含面向对象风格.函数式风格等编程风格.我们知道面向对象风格有三大特性和六大原则,三大特性是封装.继承.多态,六大原则是单一职责原则(SRP).开放封闭原 ...

  10. JavaScript中实现继承的方法(深入学习原型链、盗用构造函数、组合继承、原型式继承、寄生式继承、寄生式组合继承)

    一.原型链 原型链的基本思想就是通过原型继承多个引用类型的属性和方法. 构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型有一个属性指回构造函数,而实例有一个内部指针指向原型. 若原型是另 ...

最新文章

  1. ext4 文件系统新特性
  2. python矩阵_Python 矩阵相关
  3. boost::fusion::push_front用法的测试程序
  4. 【原】P2P应用的探究
  5. 两个字和三个字一样宽_武汉国庆出行 记好三个字
  6. 【计算机组成原理】虚拟存储器和Cache的比较
  7. mybatis 自动生成integer_通过mybatis-generator-core工具自动关联表生成对应model、mappers及dao层代码类完整教程...
  8. nginx ngx_http_proxy_module(反向代理)
  9. mvc路由原理 php_PHP实战002:CodeIgniter安装和入门使用
  10. 纯新手DSP编程--5.21--RTDX
  11. Hadoop:Hadoop简介及环境配置
  12. 倒立摆源代码仿真matlab/simulink神经网络PID(模糊)控制校正LQR 神经网络 倒立摆控制 倒立摆LQR控制仿真 单级倒立摆的模糊控制 旋转倒立摆
  13. 华硕笔记本BIOS设置详解
  14. nextjs的发布,pm2发布nextjs项目
  15. 关于Pearson相关性系数、Cosine相似度、欧式距离
  16. Python 【问题描述】按照世卫组织的标准: 男性:(身高cm-80)×70%=标准体重 女性:(身高cm-70)×60%=标准体重 标准体重正负10%为正常体重(含10%) 标准体重正负1
  17. android obtain,Android Message.obtain() 之 高效原因分析
  18. 4246. 【五校联考6day2】san
  19. matlab画y等于x平方,如何用matlab画Y=X^2的图啊?
  20. Windows离线语音识别服务端

热门文章

  1. 2022卡塔尔世界杯中人体姿态重建加持的半自动越位技术
  2. C#常用命名空间集合
  3. python读取二进制文件_python读取二进制流 Python二进制方式读写文件 - 电脑常识 - 服务器之家...
  4. JeffDean又用深度学习搞事情:这次要颠覆整个计算机系统结构设计
  5. 帆软报表跨域请求头带自定义属性报403错误
  6. 获取图片的创建修改时间
  7. 优酷、腾讯视频播放器插件
  8. 小甲鱼零基础学python pdf_鱼C论坛小甲鱼《零基础入门学习python》课程课后题.pdf...
  9. 莉莉丝发布6款游戏中4款Cocos,我们来聊技术
  10. Layui的数据表格排序:浅谈