乐趣区

js面向对象

原型

  • 我们平时写 function 函数时,其实是 Function() {}通过仿照 function() {}创造出来的。每个 function 都存在一个 prototype 属性,这个属性可以理解为 用来依照这个属性去创建别的函数或对象。
  • 我们平时写的对象 var obj = {}, 其实是以 object 为原版,被 Object 创建出来的。
  • 向上宿主就是:

‘object’function Object Function

function 是以 object 为原版被 Function 创建
Function 是以 function 为原版被自己(Function)创建
Object 是以 function 为原版被 Function 创建
Object 和 Function 的原版是 null
Object 以 null 为原版造出了 object
其他 function 都是以 function 为原版被 Function 创建的 prototype 为 object
其他的 new Object 都是以 object 为原版被 Object 创建的

当拥有一个函数时,这个函数就拥有了一个 prototype 属性,这个属性是个对象,对象中包含一个 constructor 属性,指向这个函数。还包含一个__proto__ 是这个函数的原型链,也就是它自己的原版.

当创建一个这个函数的实例时,实例是一个对象,自动拥有 constructor 属性,指向构造它的函数。还包含一个__proto__属性 是这个对象的原型链,也就是它的原版

当创建一个父类 SuperClass 时

// 父类
function SuperClass() {this.getName = function() {}}
// 子类
function SubClass() {}

子类继承父类,是指子类继承父类的公有属性和公有方法
相当于在子类中,复制一份父类的公有属性和公有方法,相当于以父类为
原版,在子类中构建一份,或者是在子类中可以拿着原型链,向上溯源,找到父类的公有属性和公有方法

SubClass.prototype = new SuperClass()

我们将子类构造函数的 prototype 赋值为父类的实例
子类会对父类的公有方法覆盖,不管该方法传参和内部实现是否一致,都将用子类的方法覆盖父类的方法

退出移动版