Object.prototype是一个对象,用于表示Object的原型对象。几乎所有的JavaScript对象都是Object的实例,其原型链上最后一个就是指向Object.prototype。一个典型的对象继承了Object.prototype的属性和方法。
也可以创建没有原型对象的对象,比如通过Object.create(null)创建,或通过Object.setPrototypeOf(obj, null)方法来改变指定对象的原型对象。
改变Object.prototype的属性和方法,或给Object.prototype添加属性和方法,都会影响到原型链上的所有对象,除非这些对象本身有定义相同的属性和方法进一步覆盖。
var obj1 = {};
Object.getPrototypeOf(obj1) === Object.prototype; // 普通对象的原型就是Object.prototype
var n = new Number(1);
// n是一个通过Number构造函数创建的对象,其原型是Number.prototype
Object.getPrototypeOf(n) === Number.prototype;
// 而Number.prototype的原型最终指向Object.prototype
Object.getPrototypeOf(Number.ptototype) === Object.prototype;
var obj2 = Object.create(null);
Object.getPrototypeOf(obj2) === null; // 通过Object.create(null)创建的对象其原型为null。
var obj3 = {};
Object.setPrototypeOf(obj3, null);
Object.getPrototypeOf(obj3) === null; // 通过Object.getPrototypeOf()方法修改对象的原型。
Object.prototype的属性特性是:
writable: false
enumerable: false
configurable: false
即不可写、不可枚举、不可配置。
Object.prototype有7个方法,分别是:
constructor:特定的函数,用于创建一个对象。指向Object本身,即Object.prototype.constructor === Object。
hasOwnProperty:返回一个布尔值,表明一个属性或方法是否是对象自有的,而非通过原型链继承的。
isPrototypeOf:返回一个布尔值,表明当前对象是否在某对象的原型链上。
propertyIsEnumerable:返回一个布尔值,表明当前属性或方法是否是对象自有的且可枚举的。
valueOf:返回对象的原始值。
toString:返回对象的字符串描述。
toLocalString:返回对象的本地化字符串
参考链接:https://zhuanlan.zhihu.com/p/52127423
相关面试题目:
下面运行结果正确的是(D )
var a = {};
var b = Object.prototype;
console.log([a.prototype === b, Object.getPrototypeOf(a) === b]);
A、[true, false]
B、[true, true]
C、[false, false]
D、[false, true]
解析:这题考的是__proto__和prototype的区别
Object实际上是一个构造函数(typeof Object的结果为"function")
使用字面量创建对象和new Object创建对象是一样的,
所以a.__proto__也就是Object.prototype,
而Object.getPrototypeOf(a)与a.__proto__是一样的,所以第二个结果为true
而实例对象是没有prototype属性的,只有函数才有
所以a.prototype其实是undefined,第一个结果为false