请问大神们一个问题,刚看到原型链__proto__和原型对象prototype时发现js内置对象Array和构造器函数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()就是构造方法
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
通过构造器函数
Array
生成的对象即是js的内置对象数组Array。区别的话,只能说一个是数组(对象),另一个则是函数。