用简单表单创建javascript对象的多边形填充

用简单表单创建javascript对象的多边形填充,javascript,closures,polyfills,iife,Javascript,Closures,Polyfills,Iife,javascript Object.create()的多边形填充是由一些代码完成的,我对此完全感到困惑。代码链接是 if(type of Object.create!=“function”){ //ECMA-262第5版15.2.3.5的生产步骤 //参考:http://es5.github.io/#x15.2.3.5 Object.create=(函数(){ //要节省内存,请使用共享构造函数 函数Temp(){} //对Object.prototype.hasOwnProperty进行安全

javascript Object.create()的多边形填充是由一些代码完成的,我对此完全感到困惑。代码链接是

if(type of Object.create!=“function”){
//ECMA-262第5版15.2.3.5的生产步骤
//参考:http://es5.github.io/#x15.2.3.5
Object.create=(函数(){
//要节省内存,请使用共享构造函数
函数Temp(){}
//对Object.prototype.hasOwnProperty进行安全引用
var hasOwn=Object.prototype.hasOwnProperty;
返回函数(O){
//1.如果类型(O)不是Object或Null,则抛出TypeError异常。
如果(类型O!=“对象”){
抛出类型错误('对象原型只能是对象或空');
}
//2.让obj作为创建新对象的结果,就像
//表达式new Object(),其中Object是标准内置对象
//具有该名称的构造函数
//3.将obj的[[Prototype]]内部属性设置为O。
原型温度=0;
var obj=新温度();
Temp.prototype=null;//我们不要保留对O的错误引用。。。
//4.如果参数属性存在且未定义,则添加
//通过调用标准内置函数将属性拥有到obj
//函数Object.defineProperties与参数obj和
//财产。
如果(arguments.length>1){
//Object.defineProperties在其第一个参数上不支持Object。
变量属性=对象(参数[1]);
用于(属性中的var属性){
if(hasOwn.call(Properties,prop)){
obj[prop]=属性[prop];
}
}
}
//5.返回obj
返回obj;
};
})();

}
它们都可以工作,但最初的版本使用iLife有几个原因。评论中提到了其中两个

// To save on memory, use a shared constructor
您的版本并非如此,其中
var Temp=function(){}被包装到函数中,并且每次使用它时都会创建一个新实例

// make a safe reference to Object.prototype.hasOwnProperty
由于
Object.prototype.hasOwnProperty
可能会在使用时被覆盖,因此polyfill会确保在每个
对象上都有自己的安全引用。create

这也是许多人使用IIFE来避免污染全局名称空间的常见原因

这些主要是保障措施,在这种情况下不需要。但我看不出有什么理由把它们拿走