如何声明自定义 JavaScript 库方法的别名缩写?
How to declare alia shorthands of methods of my custom JavaScript library?
我想知道如何在我的 JavaScript 库中为方法创建别名速记...
我的库的方法声明结构如下:
myLib = function(selector){
var x, obj = {
slct(selector){
// ... the method itself ...
},
attr(a,b){
if(x){
// ... the method itself ...
return this
}
},
class(a,b){
if(x){
// ... the method itself ...
return this
}
},
data(a,b){
if(x){
// ... the method itself ...
return this
}
},
style(a,b){
if(x){
// ... the method itself ...
return this
}
}
// ... and many more ...
};
x = obj.slct(selector);
return obj
}
我这样调用我的方法:
myLib('#someDOMelement').attr('href','https://domain.tld/subpage');
myLib('#someDOMelement').class('someNewClass');
myLib('#someDOMelement').data('someDataSet');
myLib('#someDOMelement').style('background','#000');
但我想声明我的方法的别名,例如:
myLib('#someDOMelement').a('href','https://domain.tld/subpage');
myLib('#someDOMelement').c('someNewClass');
myLib('#someDOMelement').d('someDataSet');
myLib('#someDOMelement').s('background','#000');
我该怎么做?
我现在看到的唯一方法是第二次声明整个方法,我猜这不是最有效的方法。 :D
感谢您对此的任何帮助! :)
由于您是为每次调用 myLib
创建对象并依赖于函数关闭 x
这一事实,因此除了涉及访问器(在答案的下方),您只需在创建 obj
:
后设置这些属性
// ...
obj.a = obj.attr;
obj.c = obj.class;
obj.d = obj.data;
obj.s = obj.slct;
x = obj.slct(selector);
return obj
}
或者您可以使用循环,但它似乎不太易于维护:
// ...
for (const name of ["attr", "class", "data", "slct"]) {
obj[name.charAt(0)] = obj[name];
}
x = obj.slct(selector);
return obj
}
另一种方法是使用具有访问器属性的原型 a
等,但它添加了另一个函数调用(通常不重要):
const myLibProto = {
get a() {
return this.attr;
},
get c() {
return this.class;
},
get d() {
return this.data;
},
get s() {
return this.slct;
}
};
myLib = function(selector){
var x, obj = Object.assign(Object.create(myLibProto), {
slct(selector){
// ... the method itself ...
},
attr(a,b){
if(x){
// ... the method itself ...
return this
}
},
class(a,b){
if(x){
// ... the method itself ...
return this
}
},
data(a,b){
if(x){
// ... the method itself ...
return this
}
},
style(a,b){
if(x){
// ... the method itself ...
return this
}
}
// ... and many more ...
}));
x = obj.slct(selector);
return obj
}
我想知道如何在我的 JavaScript 库中为方法创建别名速记...
我的库的方法声明结构如下:
myLib = function(selector){
var x, obj = {
slct(selector){
// ... the method itself ...
},
attr(a,b){
if(x){
// ... the method itself ...
return this
}
},
class(a,b){
if(x){
// ... the method itself ...
return this
}
},
data(a,b){
if(x){
// ... the method itself ...
return this
}
},
style(a,b){
if(x){
// ... the method itself ...
return this
}
}
// ... and many more ...
};
x = obj.slct(selector);
return obj
}
我这样调用我的方法:
myLib('#someDOMelement').attr('href','https://domain.tld/subpage');
myLib('#someDOMelement').class('someNewClass');
myLib('#someDOMelement').data('someDataSet');
myLib('#someDOMelement').style('background','#000');
但我想声明我的方法的别名,例如:
myLib('#someDOMelement').a('href','https://domain.tld/subpage');
myLib('#someDOMelement').c('someNewClass');
myLib('#someDOMelement').d('someDataSet');
myLib('#someDOMelement').s('background','#000');
我该怎么做?
我现在看到的唯一方法是第二次声明整个方法,我猜这不是最有效的方法。 :D
感谢您对此的任何帮助! :)
由于您是为每次调用 myLib
创建对象并依赖于函数关闭 x
这一事实,因此除了涉及访问器(在答案的下方),您只需在创建 obj
:
// ...
obj.a = obj.attr;
obj.c = obj.class;
obj.d = obj.data;
obj.s = obj.slct;
x = obj.slct(selector);
return obj
}
或者您可以使用循环,但它似乎不太易于维护:
// ...
for (const name of ["attr", "class", "data", "slct"]) {
obj[name.charAt(0)] = obj[name];
}
x = obj.slct(selector);
return obj
}
另一种方法是使用具有访问器属性的原型 a
等,但它添加了另一个函数调用(通常不重要):
const myLibProto = {
get a() {
return this.attr;
},
get c() {
return this.class;
},
get d() {
return this.data;
},
get s() {
return this.slct;
}
};
myLib = function(selector){
var x, obj = Object.assign(Object.create(myLibProto), {
slct(selector){
// ... the method itself ...
},
attr(a,b){
if(x){
// ... the method itself ...
return this
}
},
class(a,b){
if(x){
// ... the method itself ...
return this
}
},
data(a,b){
if(x){
// ... the method itself ...
return this
}
},
style(a,b){
if(x){
// ... the method itself ...
return this
}
}
// ... and many more ...
}));
x = obj.slct(selector);
return obj
}