js 原型、继承整理

JavaScript 常被描述为一种基于原型的语言 (prototype-basedanguage)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。
原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。
准确地说,这些属性和方法定义在Object的构造器函数(constructorfunctions)之上的prototype属性上,而非对象实例本身。通过原型这种机制,JavaScript 中的对象从其他对象继承功能特性

  • 在javascript中,每个函数都有一个特殊的属性叫作原型(prototype)
  • 对象的原型可以通过Object.getPrototypeOf(obj)或者已被弃用的__proto__属性获得
  • prototype是函数才有的属性,__proto__属性是对象的属性,大多数情况下,__proto__ 可以理解为“构造器的原型”,即__proto__===constructor.prototype,但是通过 Object.create()创建的对象有可能不是.

Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

function Constructor(){}
o = new Constructor();
// 等价于:
o = Object.create(Constructor.prototype);
let obj1 = { a: 1 };
let obj2 = Object.create(obj1);
 console.log('obj2.constructor',obj2.constructor)
 console.log("obj2.__proto__:",obj2.__proto__); //Object {a: 1}

Object.getPrototypeOf(obj)
在ES5中,如果传递给方法的参数不是对象,则会抛出TypeError异常。
在ES6中,如果传递给方法的参数不是对象,则会强制类型转换为对象。

原型继承、构造函数继承、组合继承

在这里插入图片描述

ES5实现继承

  • 原型链(无法设置参数)
  • 借用构造函数
  • 组合继承
  • 原型式继承
  • 寄生式继承
  • 寄生组合式继承
    ES6实现继承

原型链继承(无法设置参数)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章