从 ES6 以来,JavaScript 提供了一系列内置函数来操控原型
Object.create 根据指定的原型创建新对象,原型可以使null;Object.setPrototypeOf 设置一个对象的原型;利用这三个方法,我们可以完全抛开类的思维,利用原型来实现抽象和复用
create方法
var cat = { say(){ console.log("meow~"); }, jump(){ console.log("jump"); } } var tiger = Object.create(cat, { //基于猫对象创建了一个虎对象,并进行了一些修改 say:{ writable:true, configurable:true, enumerable:true, value:function(){ console.log("roar!"); } } }) var anotherCat = Object.create(cat);//依据cat创建一个新对象(继承cat的所有属性) anotherCat.say(); //meow~ var anotherTiger = Object.create(tiger); anotherTiger.say(); //rora! anotherTiger.jump(); //jumpObject.setPrototypeOf方法
var cat = { say(){ console.log("meow~"); }, jump(){ console.log("jump"); } } var tiger = {} Object.setPrototypeOf(tiger , cat ) //设置tiger的原型是cat,tiger对象可以访问cat的所有属性(属性和方法)。 /* Object.setPrototypeOf(object, prototype)返回的是参数对象本身 所以上边两句也可以写成 var tiger = Object.setPrototypeOf({}, cat ) 结果是一样的 */ cat.say() //meow~ tiger.say() //meow~ tiger.jump() //jump