强迫症菜鸟一枚...
function name(num){
var width = a;
var default_width = b;
var scale = b / a;
var real = Math.ceil(num / scale);
return real;
}
写一些函数经常会遇到类似的问题,像这个函数我会多次调用.但是前三行其实都是重复计算的.
var width = a;
var default_width = b;
var scale = b / a;
function name(num){
var real = Math.ceil(num / scale);
return real;
}
写成上面这种感觉很乱
(function nameVar(){
var width = a;
var default_width = b;
scale = b / a;
}())
function name(num){
var real = Math.ceil(num / scale);
return real;
}
最后写成上面这样了
想问一下类似这样的函数有什么好一些的写法?不重复计算,看起来也容易明白.
巴扎黑2017-04-10 14:50:52
var a = 40, b = 20;
var cname = {
width: a,
default_width: b,
scale: a / b,
ceil: function(num) {
return Math.ceil(num/this.scale)
}
}
console.log( cname.ceil(2) );
高洛峰2017-04-10 14:50:52
利用立即调用函数表达式
和闭包
的概念.
var name = (function() {
var width = a; // 目测这个变量在你代码中没用哈
var default_width = b; // 同上
var scale = b / a;
return function(num) {
var real = Math.ceil(num / scale);
return real;
};
}());
黄舟2017-04-10 14:50:52
var O = {};
O.config = {
a: 10,
b: 20
};
O.test = function(data) {
var config = this.config;
var scale = (data.a || config.a) / (data.b || config.b);
return Math.ceil(data.num / scale);
};
调用:
// 默认配置
O.test({
num: 2
});
// 覆盖配置
O.test({
num: 2,
a: 30,
b: 40
});
巴扎黑2017-04-10 14:50:52
把公用的部分抽取出来放进config对象里。
var config = {
default_width: b,
};
function name(num, width){
width = width | a;
var scale = config.default_width / width;
var real = Math.ceil(num / scale);
return real;
}
伊谢尔伦2017-04-10 14:50:52
写个高大上的。
var Cname = function(a, b){
this.scale = a / b;
}
Cname.prototype = {
constructor: Cname,
ceil: function(num){
return Math.ceil(num / this.scale);
}
}
var test = new Cname(40, 20);
console.log(test.ceil(4));
http://jsfiddle.net/qq273628265/7f79cryh/2/
怪我咯2017-04-10 14:50:52
"use strict";
function User() {
this.scale = 0;
}
User.prototype.name = function(num) {
var real = Math.ceil(num / this.scale);
return real;
}
MyUser = new User();
MyUser.scale = 1;
var name = MyUser.name(5);
console.log(name);
JavaScript面向对象简介
大家讲道理2017-04-10 14:50:52
var GVAR = {};
GVAR.real = function real (){
var width = a,
default_width = b,
scale = b/a;
return function( num ){
return Math.ceil(num/scale);
}
}();
GVAR.real(2);