Javascript 是否可以将Object.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

我检查了一些JS库代码,了解到它们正在使用来自主对象的prototype函数,比如
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(这是不可能的)。@Shubham
Object.create(null)
是一种特殊情况,以这种方式创建的对象将无法访问位于
对象.prototype
的getter/setter。我认为你不能自己实现
Object.create(null)
例如polyfill等…@Vassan感谢你的快速响应。但是当我们用object.create(null)创建对象时,为什么原型是null呢?这是一个不同的用例。您显式地创建了一个带有空原型的新对象(作为参数传递的对象设置为所创建实例的
\uuuuuuuuuuuuuuuuuuuuuuuuuu
)。这不同于将内置对象类型的prototype字段本身设置为null(这是不可能的)。@Shubham
Object.create(null)
是一种特殊情况,以这种方式创建的对象将无法访问位于
对象.prototype
的getter/setter。我认为你不能自己实现
Object.create(null)
例如polyfill等。你可以创建原型为null的对象
var obj=Object.create(空)。当迭代这些对象而不进行
.hasOwnProperty()
检查时,它非常有用。您可以创建原型为null的对象
var obj=Object.create(空)。当迭代这些对象而不进行
.hasOwnProperty()
检查时,它非常有用。