通过原型实例指定创建对象的类型,并且通过拷贝原型来创建新的对象。
在 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);//trueprototype 的几种方法
letproto={a:1}letpropertiesObject={b: {value: 2}}letobj=Object.create(proto,propertiesObject)console.log(obj.__proto__===proto);// true// 方法继承letproto=function(){}proto.prototype.excute=function(){}letchild=function(){}// 让child 继承proto的所有原型方法child.prototype=newproto()letFoo=function(){}console.log(Foo.prototype.__proto__===Object.prototype);// trueprototypeObj.isPrototypeOf(obj)contructor.prototype是否出现在obj的原型链上
objinstanceofcontructorObject.getPrototypeOf(obj) 方法返回指定对象obj的原型(内部[[Prototype]]属性的值)
Object.getPrototypeOf(obj)设置一个指定的对象的原型 ( 即, 内部[[Prototype]]属性)到另一个对象或 null
varobj={}varprototypeObj={}Object.setPrototypeOf(obj,prototypeObj)console.log(obj.__proto__===prototypeObj)// true