美文网首页
面向对象

面向对象

作者: 猴子Hope | 来源:发表于2018-01-03 20:33 被阅读0次

一、类的声明

//构造函数

function Parent() {

    this.firstName = 'Hou';

}

Parent.prototype.say(){

    console.log('hello');

}

//ES6

class Parent2(){

    consutractor () {

        this.name = 'Zhang';

    }

}

二、类的实例化

var parent= new Parent ();

三、类的继承

1. 借助构造函数实现继承

    原理:改变函数运行时的上下文,即this的指向

function Child1() {

    Parent.call(this);

    this.lastName = 'Peng';

}

    缺点:父类原型对象上的方法无法被继承

console.log(new Child1().say());    //出错,找不到此方法

2. 借助原型链实现继承

    原理:改变子类的prototype(即其实例的__proto__)属性指向其父类的实例

function Child2() {

    this.lastName = 'Peng';

}

Child2.prototype = new Parent();

    原型链原理:实例的__proto__属性指向其构造函数的prototype属性

new Child2().__proto__ === Child2.prototype    //true

    缺点:原型链中的原型对象是共用的,子类实例的原型对象是同一个引用,当一个实例的属性改变时,其他实例也跟着改变

var c21 = new Child2();

var c22 = new Child2();

c21.__proto__ === c22.__proto__    //true

3. 组合方式实现继承

    原理:结合构造函数和原型链方法的优点,弥补了此两种方法的不足    

function Child3() {

    Parent.call(this);

    this.lastName = 'Peng';

}

Child3.prototype = new Parent();

    缺点:父类构造函数执行了两次

4. 组合方式实现继承的优化1

    原理:子类的原型对象引用父类的原型对象

function Child4() {

    Parent.call(this);

    this.lastName = 'Peng';

}

Child4.prototype= Parent.prototype;

    缺点:无法区分实例是子类还是父类的实例,实例的constructor属性为父类构造函数(方法2,3也有同样的缺陷)

var c4 = new Child4();

console.log(c4 instanceof Child4);    //true

console.log(c4 instanceof Parent);    //true

console.log(c4.constructor);    //Parent;

5. 组合方式实现继承的优化2,完美写法

    原理:利用Object.create()函数创建的对象

function Child5() {

    Parent.call(this);

    this.lastName = 'Peng';

}

Child5.prototype = Object.create(Parent.prototype);

Child5.prototype.constructor = Child5;

相关文章

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

  • 20-OOP类与对象

    面向对象 Object Oriented 学习面向对象:XXOO 面向对象的学习: 面向过程和面向对象的区别: 面...

  • JavaScript面向对象核心知识归纳

    面向对象 概念 面向对象就是使用对象。面向对象开发就是使用对象开发。 面向过程就是用过程的方式进行开发。面向对象是...

  • 面向对象(未完成)

    面向对象 标签(空格分隔): 面向对象 第一章:面向对象(上) 什么叫面向对象 面向过程、面向对象、两者区别 构造...

  • 面向对象:创建对象&继承

    博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...

  • 面向对象

    了解什么是面向对象 首先,我们学习面向对象,要了解什么是面向对象,面向对象的重要概念:类,对象。 面向对象提出的这...

  • 面向对象的三大基本特征和五大设计原则

    1、面向对象概念 1.1、理解面向对象 面向对象是相对面向过程而言; 面向对象和面向过程都是一种思想; 面向过程:...

网友评论

      本文标题:面向对象

      本文链接:https://www.haomeiwen.com/subject/sfihnxtx.html