对象相关方法Object.getPrototypeOf()Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。varF=function(){};varf=newF();Object.getPrototypeOf(f)===F.prototype//true上面代码中实例对象f的原型为F.prototype下面是几个特殊对象的原型。//空对象的原型是Object.prototypeObject.getPrototypeOf({})===Object.prototype//true//Object.prototype的原型是nullObject.getPrototypeOf(Object.prototype)===null//true//函数的原型为Function.prototypefunctionf(){}Object.getPrototypeOf(f)===Function.prototype//trueObject.setPrototypeOf()Object.setPrototypeOf方法为参数对象设置原型并返回参数对象。它有两个参数,第一个是现有对象,第二个是原型对象。vara={};varb={x:1};Object.setPrototypeOf(a,b);Object.getPrototypeOf(a)===b//truea.x//1在上面的代码中,Object.setPrototypeOfmethod将对象a的原型设置为对象b,这样a就可以共享b的属性。Object.create()//原型对象varA={print:function(){console.log('hello');}};//实例对象varB=Object.create(A);Object.getPrototypeOf(B)===A//trueB.print()//helloB.print===A.print//true中上面代码中,Object.create()方法以A对象为原型生成了B对象。B继承了A的所有属性和方法。Object.prototype.isPrototypeOf()实例对象的isPrototypeOf方法用于判断该对象是否为参数对象的原型。varo1={};varo2=Object.create(o1);varo3=Object.create(o2);o2.isPrototypeOf(o3)//trueo1.isPrototypeOf(o3)//trueObject.prototype.__proto__varobj={};varp={};obj.__proto__=p;Object.getPrototypeOf(obj)===p//true上面的代码通过__proto__属性将p对象设置为obj对象的原型。Object.getOwnPropertyNames()Object.getOwnPropertyNames方法返回一个数组,其成员为参数对象自身所有属性的键名,不包括继承的属性键名。Object.getOwnPropertyNames(Date)//["parse","arguments","UTC","caller","name","prototype","now","length"]Object.prototype.hasOwnProperty()对象实例hasOwnProperty方法返回一个布尔值,用于判断某个属性是定义在对象本身上,还是定义在原型链上。Date.hasOwnProperty('length')//trueDate.hasOwnProperty('toString')//false
