javascript中用构造器创建对象与字面量创建对象的区别
来源:互联网 发布:python退出程序 编辑:程序博客网 时间:2024/06/06 08:47
当用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
下面我们来研究下使用构造器处创建对象和使用字面量创建对象的区别到底是什么,先看下面的代码
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
- javascript中用构造器创建对象与字面量创建对象的区别
- javascript中用构造器创建对象与字面量创建对象的区别
- js中用构造器创建对象与字面量创建对象的区别
- js中的字面量与构造函数创建对象
- Javascript 对象字面量与构造函数
- JavaScript构造函数及原型对象 使用Object或对象字面量创建对象 工厂模式创建对象 构造函数模式创建对象 原型模式创建对象 构造与原型混合模式创建对象
- js关于字面量与构造函数创建对象的几点理解
- 字面量创建对象的过程
- 对象的创建(字面量形式)
- [JavaScript] 对象字面量与JSON的区别
- Javascript---字面量创建对象、组合构造函数+原型模式、动态原型模式
- 使用对象字面量创建对象
- JavaScript 函数、对象字面量与构造函数
- JavaScript对象字面量(即JavaScript用户自定义对象)与JSON字符串的区别:
- 常见对象_String字面值对象和构造方法创建对象的区别
- json格式与javascript对象字面量和数组对象的区别
- javascript中对象字面量与数组字面量
- javascript对象字面量
- HDU 4629 Burning
- jquery中使用submit提交按钮
- google面试题及我的算法(1)——交叉换位
- Linux Module的来龙去脉浅析
- JSP乱码解决方案
- javascript中用构造器创建对象与字面量创建对象的区别
- C++学习过程1--简单程序
- poj 1922
- 理解javascript中的function与new Function的区别
- arm linux kernel 从入口到start_kernel 的代码分析
- mysql就是个坑
- Spring之AOP实例
- ARM FP
- 对javascript中的for in循环和for循环的深入讨论