如何声明自定义 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
}