Javascript 是否可以将Object.prototype设为空?
我检查了一些JS库代码,了解到它们正在使用来自主对象的prototype函数,比如Javascript 是否可以将Object.prototype设为空?,javascript,Javascript,我检查了一些JS库代码,了解到它们正在使用来自主对象的prototype函数,比如Object.prototype.toString.call(a,this)(这里a是一个对象)。那么是否可以在主对象原型中分配null,比如Object.prototype=null Object.prototype是。事实上,没有一个内置的原型是可写的 您可以在这里尝试: console.log(Object.prototype.toString的类型)//“功能” Object.prototype=null
Object.prototype.toString.call(a,this)
(这里a是一个对象)。那么是否可以在主对象原型中分配null
,比如Object.prototype=null
Object.prototype是。事实上,没有一个内置的原型是可写的
您可以在这里尝试:
console.log(Object.prototype.toString的类型)//“功能”
Object.prototype=null;
log(type of Object.prototype.toString)//未为空-仍为“函数”
log(typeof String.prototype.substring)//“功能”
String.prototype=null;
log(typeof String.prototype.substring)//相同的
对象。原型是。事实上,没有一个内置的原型是可写的
您可以在这里尝试:
console.log(Object.prototype.toString的类型)//“功能”
Object.prototype=null;
log(type of Object.prototype.toString)//未为空-仍为“函数”
log(typeof String.prototype.substring)//“功能”
String.prototype=null;
log(typeof String.prototype.substring)//同样的
@Vassan感谢您的快速响应。但是当我们用object.create(null)创建对象时,为什么原型是null呢?这是一个不同的用例。您显式地创建了一个带有空原型的新对象(作为参数传递的对象设置为所创建实例的\uuuuuuuuuuuuuuuuuuuuuuuuuu
)。这不同于将内置对象类型的prototype字段本身设置为null(这是不可能的)。@ShubhamObject.create(null)
是一种特殊情况,以这种方式创建的对象将无法访问位于对象.prototype
的getter/setter。我认为你不能自己实现Object.create(null)
例如polyfill等…@Vassan感谢你的快速响应。但是当我们用object.create(null)创建对象时,为什么原型是null呢?这是一个不同的用例。您显式地创建了一个带有空原型的新对象(作为参数传递的对象设置为所创建实例的\uuuuuuuuuuuuuuuuuuuuuuuuuu
)。这不同于将内置对象类型的prototype字段本身设置为null(这是不可能的)。@ShubhamObject.create(null)
是一种特殊情况,以这种方式创建的对象将无法访问位于对象.prototype
的getter/setter。我认为你不能自己实现Object.create(null)
例如polyfill等。你可以创建原型为null的对象var obj=Object.create(空)代码>。当迭代这些对象而不进行.hasOwnProperty()
检查时,它非常有用。您可以创建原型为null的对象var obj=Object.create(空)代码>。当迭代这些对象而不进行.hasOwnProperty()
检查时,它非常有用。