js中除了基本类型,就是对象。可以说在js中处处皆对象。
由于js是弱语言,在编写的过程中很容易混淆 object 和 class 也就是对象和构造器。
object(对象):一般对象都由var关键字声明。
class(构造器):js中function除了声明函数,也可以声明构造器。故构造器是特殊的函数。
创建对象:
常见创建对象的方法有两种。
(1)对象字面量
var obj = { a:1, b:2 }; obj.a; //输出1
对象字面量创建的对象中也可以嵌套对象
var obj = { a:1, b:2, c:{ cx:3, cy:4 } }; obj.c.cx; //输出3
字面量构造对象函数
var obj = { a:1, b:2, //创建对象函数 add(){ return this.a + this.b; }, //函数重写 add(x,y){ return x + y; } }; obj.add(obj.a,obj.b); //输出3 obj.add(); //输出3
注意:的是对象字面量创建出的并不是class(类)而是object(对象),所以字面量创建的对象不可以当做class去new。
var obj = { a:1, b:2 }; var obj_o = new obj(); //报错
(2)构造器创建对象。(class new object)
构造器创建对象,首先创建构造器(class)。这和其他语言的class new object同理。
创建构造器:
1、function创建构造器
function obj(){ }; //构造器 var obj_1 = new obj(); //创建对象
js中function可以作为函数也可以作为构造器。
2、Constructor创建构造器
function obj(){ this.name = "obj_name"; this.from = "obj_china"; this.say = function(){ console.log("my name is " + this._name + "I‘m from " + this.from); } } var obj_1 = new obj(); obj_1.say(); //输出“my name is undefinedI‘m from obj_china”
Constructor创建构造器是用this关键字预先设定了一些属性和函数,以供class下的对象使用。
Constructor和工厂作用差不多,缺点就是每次创建一个对象就会调用一次工厂,浪费内存。
3、prototype创建构造器
function obj(){} obj.prototype._name = "obj_name"; obj.prototype.hobby = "obj_hobby"; obj.prototype.arr = new Array(); var obj_1 = new obj(); var obj_2 = new obj(); obj_1.arr.push("one"); obj_2.arr[0] //输出 one
缺点一旦修改原型属性,原型链上对象的属性都会被修改。
原型构造器,通过prototype定义一些属性和函数,通过原型构造器创建的每个对象都共用prototype定义的这些属性和函数。
时间: 2024-10-14 18:51:38