constructor的使用 : 查看对象的构造函数

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值