其他分享
首页 > 其他分享> > 优化JS函数

优化JS函数

作者:互联网

在我们开发的过程中。需要不断地迭代函数,函数的单一功能和开发闭合原则

如下面的例子:

  1. 小明在逛某品牌网店的规则,发现如下:
    如果购买女装 满200 -30 不满200 打 9.5 折
    如果购买男装 满100 - 10 不满100 打 9.5 折
    如果购买童装 满300 - 50 不满300 打 9 折
当看到这样的业务逻辑,我们可以列出最直观的函数

function onPrice (people, originPrice) {
	if (people === 'isWoman') {
		if(originPrice >= 200) {
			return originPrice - 30
		}
		return originPrice * 0.95
	}
	if (people === 'isMan') {
		if(originPrice >= 100) {
			return originPrice - 10
		}
		return originPrice * 0.95
	}
	if (people === 'isChild') {
		if(originPrice >= 300) {
			return originPrice - 50
		}
		return originPrice * 0.9
	}
}
像这样的固然可以运行计算,但是不符合函数的优化策略,1,单一功能性,这里处理了判断人群,又判断有价格,违背了单一功能性,2,开放闭合原则,如果我们在这里的基础上要新一个类型 运动服装,又要在这个函数去添加修改,容易影响到函数内部的逻辑
1, 修改为单一功能性
function isWoman ( originPrice )  {
	if(originPrice >= 200) {
		return originPrice - 30
	}
	return originPrice * 0.95
}
function isMan ( originPrice )  {
	if(originPrice >= 100) {
		return originPrice - 10
	}
	return originPrice * 0.95
}
function isChild ( originPrice )  {
	if(originPrice >= 300) {
		return originPrice - 50
	}
	return originPrice * 0.9
}
function onPrice (people, originPrice) {
	if (people === 'isWoman') {
		this.isWoman (originPrice)
	}
	if (people === 'isMan') {
		this.isMan (originPrice)
	}
	if (people === 'isChild') {
		this.isChild (originPrice)
	}
}

···

##### 经过处理,如果要新添加一个类型直接添加为函数,他们互不影响,但是这里的函数还有很多判断,新添加的类型也要在函数里操作,为了更简便一点,我用到了对象映射的方式
```js
var peopleType = {
	isWoman (originPrice) {
		if(originPrice >= 200) {
			return originPrice - 30
		}
		return originPrice * 0.95
	},
	isMan ( originPrice )  {
		if(originPrice >= 100) {
			return originPrice - 10
		}
		return originPrice * 0.95
	},
	isChild ( originPrice )  {
		if(originPrice >= 300) {
			return originPrice - 50
		}
		return originPrice * 0.9
	}
}
function onPrice (people, originPrice) {
	return peopleType [people](originPrice)
}

标签:function,return,函数,people,JS,0.95,originPrice,优化
来源: https://blog.csdn.net/qq_42183923/article/details/113484317