该代码的上下文可以帮助您更好地理解它。
这个 polyfill 涵盖了创建一个新对象的主要用例,该对象的原型已被选择,但不考虑第二个参数。- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill
该代码旨在替代环境未提供的情况Object.create(proto [, propertiesObject ])
。Object.create
因此,o
只是将用作您正在创建的新对象的原型的对象。
在实践中,这意味着我们可以o
用作我们的超类(或者更准确地说o
是我们超类的原型)。
Mozilla 文档中的示例清楚地说明了这一点:
//subclass extends superclass
Rectangle.prototype = Object.create(Shape.prototype);
回答评论,评论框感觉有点太长了:
o
是您要继承的对象的原型。从技术上讲,它也是一个对象,JS 中的一切都是一个对象。Javascript 中的几乎所有东西都是一个对象?.
为什么要从另一个对象继承?OOP 的意义何在?
这条线有什么作用?F.prototype = o;
让我们重复完整的代码,除了注释:
// if the execution environment doesn't have object.create, e.g. in old IE
if (!Object.create) {
// make object.create equal to something
Object.create = (function(){
// create a new object F which can be inherited from
function F(){}
// return a function which
return function(o){
// throw an error if
if (arguments.length != 1) {
throw new Error('Object.create implementation only accepts one parameter.');
}
// force F to inherit o's methods and attributes
F.prototype = o
// return an instance of F
return new F()
}
})() // this is an IIFE, so the code within is automatically executed and returned to Object.create
}