关于 Object.prototype,正确的是(以下内容都正确)
Object.prototye 是「Object 构造出来的对象 obj」的原型,即 obj.proto === Object.prototype
Object.proto 是 Object 的原型,由于 Object 是函数,而所有函数的原型都是 Function.prototype,所以 Object.proto === Function.prototype
Object.prototye 不是 Object 的原型,Object.proto 才是 Object 的原型(还记着之前答过「x.原型 等价于 x.proto」吗,现在只不过是把 x 替换成 Object。很多人都搞不清楚 Object.proto 和 Object.prototype 哪一个才是 Object 的原型,其实只要记住公式就好办了)
关于「原型」,正确的是(多选)下文中的 x 均代表普通对象。
「x 的原型」等价于「x.proto 所指的对象」 ,有时为了方便,我们可以认为「x 的原型」等价于「x.proto 」
一个对象的原型指的是这个对象与其他同类对象的公有属性的集合,比如 obj1 和 ob2 同时拥有 toString / valueOf,那么 toString / valueOf 等属性组成的对象,就是 obj1 和 obj2 的原型,这个原型的地址一般储存在构造函数的 prototype 里
x.__proto__和 Object.prototype 存储着同一个对象的地址,这个对象就是 x 的原型
每个对象都有原型,但除了「根对象 Object.prototype」比较特殊,Object.prototype 这个对象的原型为空 null
错
每个对象都有原型,且原型不为空(null)
「x 的原型」等价于「x.prototype 所指的对象」,有时为了方便,我们可以认为「x 的原型」等价于「x.prototype 」
关于 prototype 属性,正确的有(以下内容都正确)
所有函数一出生就有一个 prototype 属性(除了箭头函数) 所有 prototype 一出生就有一个 constructor 属性 所有 constructor 属性一出生就保存了对应的函数的地址 如果一个函数不是构造函数,它依然拥有 prototype 属性,只不过这个属性暂时没什么用 如果一个对象不是函数,那么这个对象一般来说没有 prototype 属性,但这个对象一般一定会有 proto 属性
window.Function 是一个函数对象,那么这个「函数对象」的构造函数是
Function
window.Object 是一个函数对象,那么这个「函数对象」的构造函数是
Function
window.Object 是一个函数对象,那么这个「函数对象」的 proto 是(提示,套公式 对象.proto===其构造函数.prototype)
Function.prototype
window.Function 是一个函数对象,那么这个「函数对象」的 proto 是(提示,套公式 对象.proto===其构造函数.prototype)
Function.prototype