JavaScript面向对象编程
不好的写法
function CreatePerson(name,qq){//构造函数
/*
new构造函数的时候
系统会自动new一个Object对象,var this = new Object();
最后再把这个new的this对象返回,return this;
*/
this.name=name;//属性name
this.qq=qq;//属性qq
this.showName=function(){
alert('我的名字叫:'+this.name);
}
this.showQQ=function(){
alert('我的QQ号是:'+this.qq);
}
}
var obj=new CreatePerson('user1','1234');
var obj2=new CreatePerson('user2','5678');
alert(obj.showName == obj2.showName);//false
/*
两个new生成对象的showName是不同的
new的对象多了,内存占用过多性能就会受影响了
*/
好的写法
function CreatePerson(name,qq){//构造函数
this.name=name;//属性name
this.qq=qq;//属性qq
}
CreatePerson.propotype.showName=function(){
alert('我的名字叫:'+this.name);
}
CreatePerson.propotype.showQQ=function(){
alert('我的QQ号是:'+this.qq);
}
var obj=new CreatePerson('user1','1234');
var obj2=new CreatePerson('user2','5678');
alert(obj.showName == obj2.showName);//true
/*
此时两个obj的showName是相同的
*/
面向对象编程:用构造函数加属性(变量),用原型加方法(函数)。
一样的放到原型中,不一样的放到构造函数中。 因为name、qq是不确定的,而显示的方法时相同的。面向对象: 使用对象时, 只关注对象提供的功能, 不需要关注其内部的细节, 比如jQuery
css | javascript | |
---|---|---|
class | 一次给一组元素添加 | 原型 |
style | 一次给一个元素添加 | 给对象加的一个方法 |
原型相当于css中的class, 给一组元素添加, 可以继承共用
var arr = new Array();
类 | 对象 |
---|---|
模子 | 产品(成品) |
Array() | arr |
可以 new Array() | 不可以 new arr() |
Array是一个模子, 不具备实际功能,不能 Array.push() | arr是一个产品,是拿来使用的,可以 arr.push() |
类有原型,可以 Array.prototype | 对象没有原型,不能 arr.prototype |