Javascript面向对象编程 产生对象

  Javascript是一种基于对象(Object-Based)的编程语言,常说在javascript中一切都是对象,那么对象究竟是怎么产生的呢?

      (一)原始模式

       首先说一下我们常见的对象——Object实例。创建Object实例方式有很多,第一种是使用new操作符后跟Object构造函数

?
1
2
3
var  person= new  Object();
person.name= "张三" ;
person.age=21;

  另一种方式是对象字面量表示法

?
1
2
3
4
var  person={
     name: "张三" ,
     age:21
}

  这两种方式是生成对象的原始模式。这样写有个很明显的弊端:如果我们需要n多个person对象,那么我们编码是相当罗嗦苦逼的。既然这样,那我们需要一个工厂去批量生产这些person实例。

     (二)工厂模式

?
1
2
3
4
5
6
7
8
function  createPerson(name,age){
     var  o= new  Object();
     o.name=name;
     o.age=age;
     return  o;
}<br>
var  person1=createPerson( "张三" ,20);
var  person2=createPerson( "李四" ,21);

  这样每次调用createPerson函数,传入两个参数我们就可以创建一个person实例。这样虽然可以创建对象,但是仍然不能体现“类”与对象实例的关系。

     (三)构造函数模式

      所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

 

?
1
2
3
4
5
6
function  Person(name,age){
     this .name=name;
     this .age=age;
}
var  person1= new  Person( "张三" ,21);
var  person2= new  Person( "李四" ,20);

 

  这样我们就可以通过new Person构造函数创建一个实例对象,慢慢地和我们所认知的“类”与对象实例的关系接近了,我们再进一步拓展一下这个构造函数(毕竟实际当中人的属性总不单name和age吧)。

?
1
2
3
4
5
6
7
8
9
10
function  Person(name,age){
     this .name=name;
     this .age=age;
     this .type= "高级动物" ;
     this .speak= function (){
         alert( this .name);
     }
}
var  person1= new  Person( "张三" ,21);
var  person2= new  Person( "李四" ,20);

  我们为对象添加了type属性和speek方法。可我们发现,每一个实例对象,type属性和speak()方法都是一模一样的内容,每生成一个实例,都必须为重复的内容,多占用一些内存,这样势必会造成大量的内存浪费,那有没有比较方法把一模一样的内容单独拿出来共享呢,让所有的实例对象都能访问?

     (四)原型模式(Prototype模式)

     Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。那我们可以把那些一模一样的内容(不变的属性和方法),直接定义在prototype对象上。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function  Person(name,age){
     this .name=name;
     this .age=age;
}
Person.prototype.type= "高级动物" ;
Person.prototype.speak= function (){
     alert( this .name);
}
var  person1= new  Person( "张三" ,21);
var  person2= new  Person( "李四" ,20);
console.log(person1.type);
console.log(person2.type);
person1.speak();
person2.speak();

  这种方式其实就是常说的构造函数模式+原型模式,就是将不同的部分放在构造函数中去构造,把相同的部分放在原型中去共享继承。

     总结:结合上面四种对象产生方式,我们可以根据实际开发需要去创造我们需要的对象,其实,四种模式并没主次优劣之分,只要能最大限度节省内存和代码复用高效才是最好的方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值