关于js面向对象的几点想分享一下
首先什么是对象呢? 对象是属性+方法
1.创造对象的几种方式
<1>工厂模式
function createPerson(name){
var obj=new Object();
obj.name=name;
obj.showname=function(){
alert(this.name);
}
return obj;
}
var p1=createPerson ("wang");
p1.showname();
用 new 创造对象时要大写,同时看清里面的this 指代的是哪个对象。为什么叫工厂模式呢? 其中创造对象称为准备原料,给对象设置属性和方法称为加工,最后返回对象称为出厂。
<2>构造函数模式
function CreatePerson(name){
this.name=name;
this.showname=function()
{
alert(this.name);
}
}
var p1=new CreatePerson("wang");
p1.showname();
其中构造函数模式是工厂模式的升级,他把new 移到外面,用 new 出来的构造函数里面有一个this对象,和工厂模式obj差不多,还有里面的this是隐式返回的,不需要写return 返回。构造函数为什么要大写?这个我认为这是向系统对象靠拢。
3.对于一般的基本类型如变量字符串,赋值语句即是引用,只会改变值,对于对象而言,赋值语句不仅是值的赋值,也是引用的传递,也就是地址共用。
var a=[1,2,3];
var b=a;
b.push(4);
alert(a);//a=[1,2,3,4]
alert(b);//b=[1,2,3,4]
var a=[1,2,3];
var b=a;
b=[1,2,3,4];
alert(a);//a=[1,2,3]
alert(b);//a=[1,2,3,4]
4.原型作用就是让创建的很多对象相同的方法或属性在内存中只存在一份,去改写对象共用的方法或属性。原型相当于css中的class,上面两种方法相当于css 中的style,首先是优先级,然后是可以复用。原型写在构造函数下面。
function CreatePerson(name){
this.name=name;
}
CreatePerson.prototype.showname=function()
{
alert(this.name);
}
var p1=new CreatePerson("wang");
p1.showname();
其中变的东西不能写在原型上。
最后总结一下面向对象的基本写法:
function 构造函数()
{
this.属性= ;
}
构造函数.prototype.方法=function()
{
}
var 变量=new 构造函数();
变量.方法;