16.1基本原型每个对象都包含一个原型属性(prototype),用来关联另一个对象,关联后对象可以使用属性和方法,这其实就是JavaScript的原型继承。操作原型有以下方法:(1)Object.create()根据指定的原型创建一个新的对象,原型可以是nullconstparentObj={add:function(){returnthis.a+this.b;}};constnewObj=Object.create(parentObj,{a:{value:10},b:{value:20}});console.log(newObj.add());//30(2)Object.getPrototypeOf()返回指定对象的原型控制台.log(Object.getPrototypeOf(newObj));//{add:[Function:add]}(3)Object.setPrototypeOf()将指定对象的原型设置为另一个对象或null.constparentObj={add:function(){returnthis.a+this.b;}};constchildObj={a:10,b:20};Object.setPrototypeOf(childObj,parentObj);console.log(childObj.add());//30console.log(Object.getPrototypeOf(childObj));//{add:[Function:add]}(4)Object.prototype.isPrototypeOf()返回一个布尔值,用于检查一个对象是否存在于另一个对象的原型链。console.log(parentObj.isPrototypeOf(childObj));//真正的构造函数构造函数是一个特殊的方法。主要用于在创建对象时对对象进行初始化,即给对象成员变量赋初值,在创建对象的语句中总是和new运算符一起使用。实例通过构造函数和new创建的对象是实例中三者的关系16.2先来看一张网上流传的一张神图,里面包含了原型、构造函数、实例三者的关系。image-20210530114840237.png上图中的内容可以简化为以下几项:,这段代码虽然很短,但是包含了上述的原型、构造函数和实例。//构造函数Test(a,b){this.a=a;this.b=b;}//原型Test.prototype.add=function(){returnthis.a+this.b;}//实例consttest=newTest(10,20);console.log(test.add());//30下面我们通过上面的代码来验证三者的关系来获取实例内容。实例有__proto__属性,可以看到里面的内容是原型,从而验证实例.__proto__===原型获取构造函数内容获取原型内容在原型中有构造函数属性,并且属性内容为构造函数,从而验证了prototype.constructor===构造函数本文转载自微信公众号“风筝”,可通过以下二维码关注。转载本文请联系风筝持有人公众号。
