js笔记 基础篇 (六) js的面向对象

26 篇文章 0 订阅
20 篇文章 1 订阅

js笔记 基础篇 (六) js的面向对象

waht面向对象?

严格来说,js并不是面向对象的编程语言,js是基于对象的语言,那为什么js可以面向对象呢?
js可以模拟面向对象,它可以继承,可以封装,只是没有传统面向对象语言(如java)的多态特性。
简单说一下什么是面向对象,假如我有一个需求,要输出一句话:‘我可以面向对象’,那面向过程的方式要这样做:

	console.log('我可以面向对象')	

有的朋友可能会说,这有什么问题吗?确实没有,但是如果我有一个项目,需要在10个地方都要输出这句话呢?

console.log('我可以面向对象');
console.log('我可以面向对象');
console.log('我可以面向对象');
console.log('我可以面向对象');
console.log('我可以面向对象');
console.log('我可以面向对象');
···

重复写十遍,咱先不说什么代码冗余,代码耦合这些貌似高大上的说法,我就问你,你累不累?
那要是面向对象的方式呢:

var obj = {
	say: function () {
		console.log('我可以面向对象');
	}
}
// 当你需要打印时
obj.say()
//搞定

有人又会说不就是多打几个字,有啥呢? 我这里只是举个例子如果这个需求相当复杂呢,要写100行甚至更多的代码呢?这个需求用十次你就复制粘贴十次?浪费带宽不?你累不?
当然,要是就这么一点优势,不会天天有人说面向对象怎么怎么样了?ok继续:

//我需要10个对象,每个呢有名字,有年龄, 有性别, 有say方法
//面向过程
var p1 = {
 name: 'oldDeng',
 age: 18,
 sex: 'male',
 say: function () {
		console.log('hi');
	}
}
var p2 = {
 name: 'oldLiu',
 age: 18,
 sex: 'male',
 say: function () {
		console.log('hi');
	}
}
var p3 = {
 name: 'oldLi',
 age: 18,
 sex: 'male',
 say: function () {
		console.log('hi');
	}
}
...
//嗯 没毛病,写10遍 棒棒的,
//缺点代码,冗余,耦合。。。
//那面向对象的方式呢?
//那就要用到,构造函数喽
function Person (name, age, sex, say) {
	this.name = name,
	this.age = age,
	this.sex = sex,
	this.say = say
}
var p1 = new Person('oldDeng', 18, 'male', function(){console.log('hi')})
var p2 = new Person('oldLiu', 18, 'male', function(){console.log('hi')})
...

那看起来是不是面向对象比面向过程要简洁很多呢?这还不够:

//上面的代码中我们发现除了name好像都一样
//那我们可以这样写
function Person (name) {
	this.name = name,
	this.age = 18,
	this.sex = 'male',
	this.say = function () {
		console.log('hi')
	}
}
var p1 = new Person('oldDeng')
var p2 = new Person('oldLiu')

其实这就是面向对象中的一个特性继承,不太明白的话,出门左转我有专门写过继承,写的一般般,多担待。
总结一下,打个比方吧,就好像你有盖一个大楼(项目),盖楼呢要打地基(需求),要砌墙(需求),要安装楼梯(需求)等等, 那要是面向对象的思维,就是每一个需求都有特定的人选,打地基有会打地基的人负责,砌墙有会砌墙的人负责,这些人就是对象(这也就体现了面向对象的,封装特性),当你有需求时就去找这些人就可以了。
而面向过程就是,你有相应需求是,就想要怎么去完成需求而不是去找相应的人来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值