js进阶01.面向对象编程之女票的生产方法

如题,这篇文章老湿主要讲的是对象和面向对象,属于js进阶阶段的文章,基础的呢!老湿会看心情不定期没个谱的更新。这个js的对象比较变态,喜欢sm是吧!甚至有人讲js里面万物皆对象,整的我们js程序猿很滥情一样,没有办法啊!谁叫它也没个类,这导致了,它不是一个真正面向对象的语言。有一派的说法是它是一个基于对象的语言,老湿认为~爱咋咋地,关我屁事。我们直接进入正题。

1.为什么要面向对象?

其实js程序主要分为两类,一个是面向过程,另一个就是面向对象,面向过程最重要的是模块化,从基础内容出发,一步步的完成这个功能。打个比方,厨师想炒一盘土豆丝,然后就记住了炒土豆丝的制作方法,想炒一个宫保鸡丁,就记住了炒爆鸡丁的方法,这就是面向过程。炒多了菜之后,发现好多东西都是共通的,都是一个锅,先放葱姜蒜,然后放入原料,再放各种调料什么的,只是火候,时间不同。这时原料就是我们的对象,我们可以给这个对象添加各种响应的属性和方法。面向对象的优点很明显,就是代码复用率高,有很强的扩展性和灵活性。

2.用函数建立一个对象。

首先我们来做个女朋友(对象),她有名字和用途两个属性。

function girlFriend(name,use) {

return {

name:name,

            use:use

}

}

然后我们就可以可以利用这个对象,制造出任何我们想要的女票了。

例如我们用调用函数的方法,来生成这个对象实例。

var wife1 = girlFriend("柳什么岩","吃饭");

 var wife2 = girlFriend("范什么冰冰","睡觉");

 var wife3 = girlFriend("宋什么茜","打豆豆");

骚年恭喜你,你利用女朋友这个对象,顺利制造出了三个事实存在的女友有。刺激不刺激?厉害不厉害?(坏笑)

这样写的缺点是,虽然现在你有了三个真实的女朋友,并不能体现她们的母亲是谁,你还怎么上丈母娘家献殷勤是吧!同样也不能反应她们三个之间的关系,你们四个互相蒙在鼓里,过的其乐融融,结果人家三个是姐妹,然后得知真相的你眼泪掉下来。

3.构造函数模式

老湿我作为老司机,怎么会没有方法呢!我们要用构造函数的方法写。Js内部提供了一个(constructor)模式,他就是用来找丈母娘,查户口本的,知己知彼百战不殆不是!(坏笑)

function girlFriend(name,use){

this.name=name;

this.use=use;

}

This是构造函数的内部变量。现在我们通过new就可以去生产女票啦!

var wife1 = new girlFriend("柳什么岩","吃饭");

var wife2 = new girlFriend("范什么冰冰","睡觉");

 var wife3 = new girlFriend("宋什么茜","打豆豆");

alert(wife1.name); // 柳什么岩

alert(wife1.use); // 吃饭

此时你这个女朋友实例,会自动有一个constructor属性,指向的就是生产他们的构造函数,丈母娘她们家。

alert(wife1.constructor == girlFriend); //true

 

4.Prototype模式

上文的构造函数其实有一个很大的缺点,就是浪费内存。例如我们想开一家全国的网上连锁店。

function store(apple,shoes){
    this.apple=apple;
    this.shoes=shoes;
    this.pants="蓝色中间漏洞";
    this.socks="没底";
}

苹果跟鞋的品牌不是固定的,但是后面裤衩跟袜子每家都是一样。这时候我们再new

var store1=new store("山东","耐克");

var store2=new store("河北","阿迪");

其实每new一次裤衩和袜子就又生成了一次,如同每一家地区连锁店都要备同样的货一样,显然是不合理的,浪费空间的,那么最合理的是什么呢!就是把这些一样的东西,指向同一个仓库。

function store(apple,shoes){
    this.apple=apple;
    this.shoes=shoes;
}

store.prototype.pants="蓝色中间漏洞";

store.prototype.socks="没底";

Prototype就起到了这个作用。Js还提供了isPrototypeOf(“实例”)这个方法来检查对象和实例之间的关系,返回布尔类型,及hasOwnProperty(“属性”),来检查实例的属性是自己new的还是继承自原型Prototype的。 

你可能感兴趣的:(js进阶)