1.构造函数法
类是对象的模板,定义了对象共有的方法属性数据 等,在javascript中一个函数就是一个对象,也可以看做一个类的构造方法。
所以我们可以像以下方式定义类:
//1.经典的构造方法 Q=function(name){ this.name=name; this.func_a=function(arg){ alert(arg); }; }; q=new Q(‘akun‘);
2.通过原型来定义类
原型(prototype)有点像python里的字典,原型记录了从它生成的对象所具有的方法,属性,相当于创建对象的模板
Q.prototype={ age:13, say_age:function(){ alert(‘age is‘+this.age); } }
这样,Q生成的对象不仅具有func_a函数还具有age属性和say_age方法。
Q[‘sex‘]=‘male‘;//the sex belongs to Q but instance of Q! q=new Q(‘akun‘); q.say_age();//age is 13 q.func_a(‘my name is‘+" "+ q.name)//my name is akun q.func_a(‘the sex is ‘+ q.sex);//the q.sex is undefined q.func_a(‘the sex is ‘+ Q.sex);//the sex is male //如果把Q[‘sex‘]改为Q.prototype[‘sex‘]则Q的实例q具有sex属性
3.“极简主义”
var Q={ init:function(name){ var obj={}; obj.name=name; obj.say_hello=function(){ alert(this.name); }; return obj; }, }; q=Q.init(‘akun‘); q.say_hello();
以上使用init方法创建对象,相当于init作为了构造方法来返回一个对象,我们在这个对象上定义属性和方法。
4.关于this
Q.fn= Q.prototype; Q.extend=function(attr,value){this[attr]=value;};//this指Q Q.fn.extend= Q.extend;//Q.fn.extend中的this指向Q.fn即 Q.prototype Q.extend(‘weight‘,‘100kg‘); Q.fn.extend(‘myweight‘,‘99kg‘); q=new Q(‘akun‘) alert(q.weight)//undefined alert(q.myweight)//99kg alert(Q.weight)//100kg
时间: 2024-10-24 15:55:52