Skip to content

Latest commit

History

History
101 lines (71 loc) · 2.19 KB

File metadata and controls

101 lines (71 loc) · 2.19 KB

原型模式

通过原型实例指定创建对象的类型,并且通过拷贝原型来创建新的对象。

在 JavaScript 中,实现原型模式的方法是Object.create方法,通过使用现有的对象来提供新创建的对象的_proto_

  • 每一个函数数据类型(普通函数,类)都有一个天生自带的属性:prototype,并且这个属性是一个对象数据类型的值。
  • 并且在prototype上浏览器天生添加了一个构造函数constructor,属性值是当前函数(类)本身。
  • 每一个对象数据类型叶天生自带一个属性proto,属性值是当前实例所属类的原型。
varprototype={name: 'Reaper',getName: function(){returnthis.name;}}// 同时注意 Object.create为浅拷贝varobj=Object.create(prototype,{skill: {value: 'FE'}})console.log(obj.getName());//Reaperconsole.log(obj.skill);// FEconsole.log(obj.__proto__===prototype);//true

prototype 的几种方法

1.Object.create()方法

letproto={a:1}letpropertiesObject={b: {value: 2}}letobj=Object.create(proto,propertiesObject)console.log(obj.__proto__===proto);// true

2.方法继承

// 方法继承letproto=function(){}proto.prototype.excute=function(){}letchild=function(){}// 让child 继承proto的所有原型方法child.prototype=newproto()

3.函数对Object的默认继承

letFoo=function(){}console.log(Foo.prototype.__proto__===Object.prototype);// true

4.isPrototypeOf

prototypeObj.isPrototypeOf(obj)

5.instanceof

contructor.prototype是否出现在obj的原型链上

objinstanceofcontructor

6.getPrototypeOf

Object.getPrototypeOf(obj) 方法返回指定对象obj的原型(内部[[Prototype]]属性的值)

Object.getPrototypeOf(obj)

7.setPrototypeOf

设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null

varobj={}varprototypeObj={}Object.setPrototypeOf(obj,prototypeObj)console.log(obj.__proto__===prototypeObj)// true