gpt4 book ai didi

JavaScript - 灵活的参数

转载 作者:行者123 更新时间:2023-11-30 18:13:46 26 4
gpt4 key购买 nike

我正在尝试用 JavaScript 创建一个小结构,我将在 Canvas 的库中使用它。我希望在创建此结构时传递的参数是多个参数,就像我们在编译语言中所做的那样,或者是具有与这些参数对应的属性的对象:

BoundingBox = function( x, y, w, h ) {

if( 'object' === typeof x ) {

if( ! 'x' in x ) throw new Error('Property "x" missing');
if( ! 'y' in x ) throw new Error('Property "y" missing');
if( ! 'w' in x ) throw new Error('Property "w" missing');
if( ! 'h' in x ) throw new Error('Property "h" missing');

this.x = x.x;
this.y = x.y;
this.w = x.w;
this.h = x.h;

} else {

if( null == x ) throw new Error('Parameter 1 is missing');
if( null == y ) throw new Error('Parameter 2 is missing');
if( null == w ) throw new Error('Parameter 3 is missing');
if( null == h ) throw new Error('Parameter 4 is missing');

this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
};

然后:

var bb1 = new BoundingBox(0, 0, 200, 100);

var bb2 = new BoundingBox({
x: 0,
y: 0,
w: 200,
h: 100
});

var bb3 = new BoundingBox(bb2);

这是一种干净的方法吗?在我们使用对象的情况下,使用“x”作为对象似乎很奇怪。

我还有第二个问题:所有这些错误检查都值得付出努力吗?它使代码的大小加倍,使读取和写入的时间更长,并且由于属性是公共(public)的,因此不能完全防止出现 null 或未定义的值。

感谢您的帮助:)

最佳答案

我不认为这很糟糕,但在 JavaScript 中,重载是通过每个函数可用的参数 var 更普遍地完成的。

function BoundingBox(){

//do named functions with constructors. It sets the constructor.name
//property in instances, which can be handy sometimes

if(typeof arguments[0] === 'object'){
var coordsObj = arguments[0];
}
else {
coordsObj = {} //no need for var dec even when upper if doesn't evaluate
coordsObj.x = arguments[0];
coordsObj.y = argumetns[1];
//...etc.
}
//laziest way to make those publicly available.
this.constructor.prototype = coordsObj;
}

至于测试您的参数,我会说放轻松。要么将其包装在报告参数存在问题的 try/catch 中,要么学会信任不依赖外部源的函数中的数据。当您学会了解通过您的应用程序的数据流并且您充分了解所有动态转换规则以了解出现问题时发生的情况时,整个动态类型的事情就不那么可怕了,如果出现问题,这种情况并不常见你尽职尽责,即使在严格类型的范例中你也应该如此

关于JavaScript - 灵活的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13880155/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com