javascript中用构造器创建对象与字面量创建对象的区别

  http://m.blog.csdn.net/blog/z1547840014/9734179

    当用new操作符调用一个函数时,就会创建一个新的javascript对象.接着,该函数会作为该新建对象的this值被调用,而在原始调用中所使用的参数也都将一并传递给该函数调用

        
        下面我们来研究下使用构造器处创建对象和使用字面量创建对象的区别到底是什么,先看下面的代码
        function Circle(radius){
            this.radius = radius;
        }
        var cicr = new Circle(6);
        
        var cicr2 = {radius:6};
        
        上面两个对象都会拥有2个属性,如果对js这块熟悉的同学想必已经猜到了这2个属性,一个是radius属性,另一个就是从object.prototype继承而来的属性.对于radius属性,他们没有任何区别。但是对于这个原型属性,内部实现上有细小的区别。cicr2是直接继承了object.prototype属性,而cicr是间接继承了object.prototype属性。cicr首先继承了Circle上的原型属性,这个原型属性又继承了object.prototype属性,所以它也完成了对object.prototype的继承。为了得到这种具体的关系,我们可以使用instanceof和constructor来检验他们内部的实现细节
         
         alert(cicr instanceof Object)//判断cicr对象是否属于Object对象,结果为true
         alert(cicr instanceof Circle) //判断cicr对象是否属于Circle对象,结果为true
         alert(cicr2 instanceof Object) //判断cicr2对象是否属于Object对象,结果为true
         
         alert(Circle==cicr.constructor) //判断cicr对象的构造方法是否是Circle,结果为true
         alert(Object==cicr2.constructor) //判断cicr2对象的构造方法是否是Object,结果为true
         alert(Object==cicr.constructor) //判断cicr对象的构造方法是否是Object,结果为false
         
         从上面6个例子我们可以看出instanceof和constructor的区别,也可以得到一条用的结论,即:只要一个对象a的内部prototype属性或者它的原型链上的任意对象与b.prototype是同一个对象,那么a instanceof b就返回true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值