constructor : 查看对象的构造函数
<script>
// constructor : 查看对象的构造函数
// 例
function Aaa() {
}
var a1 = new Aaa();
alert(a1.constructor); // 弹出Aaa的函数
//意思是查看a1是通过哪个构造函数来构造出它的
</script>
查看构造函数是哪个?
<script>
var arr = [];
alert( arr.constructor ); // Array 数组的构造函数是array
</script>
constructor用法:判断一个对象是不是数组
<script>
var arr = [];
alert( arr.constructor == Array ); // true
</script>
constructor是构造函数自带自动生成的属性
function Aaa() {
}
//Aaa.prototype.constructor = Aaa; //每个函数都会有的都会自动生成
修正构造函数
function Aaa() {
}
Aaa.prototype.name = '小明';
Aaa.prototype.age = 20;
var a1 = new Aaa();
alert( a1.constructor ); //弹出构造函数Aaa
我们通常说原型就是对象,所有我们也可以这样写
function Aaa() {
}
//Aaa.prototype.name = '小明';
//Aaa.prototype.age = 20;
Aaa.prototype = {
name : '小明',
age : 20
};
var a1 = new Aaa();
alert( a1.constructor ); //但是弹出 function Object() { [native code] }
//为什么这样写就错了呢,这个json直接赋值给了原型,说明重新赋值了
//重新赋值,那么系统自带的Aaa.prototype.constructor = Aaa;就被覆盖掉了
//覆盖以后找的constructor就是json所对应的constructor
所以在用上面这种方式的时候,应该把constructor的指向给修正过来
function Aaa() {
}
Aaa.prototype = {
constructor : Aaa, //修正constructor指向
name : '小明',
age : 20
};
var a1 = new Aaa();
alert( a1.constructor ); //弹出Aaa 这个时候就正确了
系统自带的属性for in 是找不到的
<script>
function Aaa() {
}
//我们尝试打出系统自带的属性
for(var attr in Aaa.prototype ){
alert(attr); //没有弹
}
</script>
<script>
function Aaa() {
}
Aaa.prototype.name = 10;
for(var attr in Aaa.prototype ){
alert(attr); // name 仅可以弹出自定义属性
}
</script>