面向对象的理解和使用

来源:互联网 发布:淘宝网店代销 编辑:程序博客网 时间:2024/06/06 15:46

面向对象的理解

没有任何编程语言的人刚开始接触面向对象是有些难以理解的。我虽然在读大学的时候学过很多编程语言,但那时还真是不理解面向对象到底是个什么鬼。现在从事前端工作,并且涉及到后端,所以,现在才开始懂了面向对象。

  • 面向对象中三种对象创建方式
  • 对象创建方法的优化

对象创建的方法

方法1:采用json方法

var obj={
name:’william’,
like:’dancing’,
work:function(){
console.log(‘《老九门》’);}
};

方法2:采用面向对象的方法
采用面向对象的方法其实就是通过new Object()关键字来创建对象。虽然很多人不赞成使用这个方法,但是我在编程的时候常常会使用。

var obj=new Object();
obj.name=’William’;
obj.like=’dancing’;
obj.work=function(){
console.log(‘《老九门》’);};

为什么很多大神不喜欢呢?因为其实这个方法还是和第一中方法的缺点一样。我以后还是尽量避免使用。只有在临时可以用一下,在改代码或者补充的时候可以用。

方法3:通过构造函数的方法构造对象
函数、属性都是对象。这个方法是讲函数对象当作构造函数来使用。构造函数的首字母要大写。

function Star(){
this.name=’William’,
this.like=’dancing’,
this.des=’《老九门》’,
this.work=function(){
console.log(‘this.name’+this.des);}
}
var s1=new Star(); //this指向了s1
s1.name=’feng’;
s1.work();
this可以直接用来添加属性。创建完构造函数后,使用时需要new实例化。
第三种方法目前来说是一种好的方法,但是这也存在一个缺点,就是对象的内部函数会在每个对象中都存放。当我们需要创建很多对象时,会浪费很多内存空间。这就不是一个好的代码。因为函数的行为是所有对象公用的,不需要每个对象都保存。所以,可以把函数放到原型,所有对象都有了公共的函数,而且内存中只保留一份,这样就极大减少内存。

方法3优化1

将属性放在构造函数中,把方法放在原型对象中
function Star(sname,slike,sdes){
this.name=sname,
this.like=slike,
this.des=sdes
}
Star.prototype=function(){
work:function(){console.log(this.des);}
};

但是,在实际项目中,常常会有参数的个数或者顺序发生变化的话,那么这个函数就没有任何作用了。通过一个参数将所有的属性覆盖

function Star(option){
this.name=option.name,
this.like=option.like,
this.des=option.des
}
Star.prototype=function(){
work:function(){console.log(this.des);},
init:function(){}
};

方法3优化2-终极

this.name=option.name,
this.like=option.like,
this.des=option.des
这些是初始化代码,将初始化的代码放在原型的init方法中
function Star(option){
this.init(option);
}
Star.prototype=function(){
work:function(){console.log(this.des);},
init:function(option){

this.name=option.name,
this.like=option.like,
this.des=option.des
};

以上是暂时对面向对象的理解,后续继续更新。

1 0
原创粉丝点击