并不是所有函数对象都有prototype。Function.prototype就没有prototype属性。

发布时间 2023-11-11 01:21:15作者: 龙陌

以下关于JavaScript的描述中错误的是
A
在原型上扩展的可枚举方法,会被for in循环出来

B
使用object.defineProperty可向对象添加或者修改属性

C
每个对象都有prototype属性,返回对象类型原型的引用

D
通过hasOwnProperty可判断一个对象以及其原型链上是否具有指定名称的属性

E
原型链是JS实现继承的一种模型

F
For循环是按顺序的,for in 循环是不一定按顺序的

正确答案:CD

for...in:遍历对象的每一个可枚举属性,包括原型链上面的可枚举属性;

Object.keys():只遍历自身的可枚举属性,不可以遍历原型链上的可枚举属性;

Object.getOwnPropertyNames():遍历自身所有属性(不论是否是可枚举的);不包括原型链

所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方***忽略掉那些从原型链上继承到的属性。所以A对D错

B:应该是Object.defindeProperty是给对象添加或修改属性的方法,Object是js的内置对象,而object是一个变量名,这一点还是有区别的,题目不够严谨吧

C:创建的每一个函数都有一个prototype(原型)属性。浏览器实现的访问对象的[[prototype]]内部属性的方式是__proto__属性。

var obj = Object.create(null)

console.log(obj)

这个方式是以null为原型创建的对象,然而null并没有原型对象,所以这样创建出来的对象也没有原型对象,所以obj没有__proto__属性。

F:红宝书上说道“for-in循环出的属性名顺序是不可预测的,返回的先后次序会因浏览器而异

每个对象都有prototype属性,返回对象类型原型的引用
这句话本身就是错的,对象有__proto__属性。prototype是函数才有的属性,对象没有