请问Array和Array()的关系

请问大神们一个问题,刚看到原型链__proto__和原型对象prototype时发现js内置对象Array和构造器函数Array()有何联系和区别呢

阅读 3.1k
3 个回答

通过构造器函数Array生成的对象即是js的内置对象数组Array。
区别的话,只能说一个是数组(对象),另一个则是函数。

Object.prototype.toString.call(Array);
// "[object Function]"
Object.prototype.toString.call(Array());
// "[object Array]"
// 前者是函数。
// 后者是空数组[]。
// Array()
// []
Array().length
// 0
Array().__proto__ === Array.prototype; // true
[].__proto__ === Array.prototype; // true
Array.__proto__ === Function.prototype; // true

Function.__proto__ === Function.prototype; //true
Function.prototype.__proto__ === Object.prototype; // true
Object.prototype.__proto__ === null; // true

Object.__proto__ === Function.prototype;  // true

// 可以看成Array和Object的__proto__指向Function.prototype;
Object.prototype.toString.call(Object);
// "[object Function]"
Object.prototype.toString.call(Object());
// "[object Object]"
// Array和Object都是构造函数。
// 他们都是用new 来调用的,当然也可以省略new (虽然不推荐)。

可以猜测下其内部是这样实现不需要new的。

var Person = function(name){
    if(!(this instanceof Person)){
        return new Person(name);
    }
    this.name = name;
}

var p = new Person('轩辕');
console.log(p.name); // ('轩辕')

var p1 = Person('rowboat');
console.log(p1.name); // 'rowboat'

关于原型链可以看看这篇文章:最详尽的 JS 原型与原型链终极详解,没有「可能是」。(三)
希望对你有帮助。

同学,学过js 对象没,你都知道构造函数和原型,咋就还不明白这个道理呢;
见过 function Person(name){

this.name = name;

}
Person.prototype.sayname = function(){

console.log(this.name)

}
这里的Person就对应你说的Array,Person()就是构造方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题