【问题标题】:Does there exist any syntactic sugar for the Javascript prototype field?Javascript 原型字段是否存在任何语法糖?
【发布时间】:2012-08-27 14:29:54
【问题描述】:

有什么方法可以清理我的 javascript 代码中的所有 Obj.prototype.field = 语句?我正在使用 jQuery。我想做同样的事情,除了我的代码中没有其他单词是prototype。也许我要问的是不可能的——如果是这样,请告诉我,这就是答案。

我发现这是一个无法搜索到的问题,因为有一个名为“Prototype”的 js 库...

【问题讨论】:

  • Coffeescript 是很好的语法糖。
  • 是的,很遗憾咖啡不是一种选择。

标签: javascript prototype


【解决方案1】:

使用jQuery.extend。第二个参数的属性将被复制到第一个:

$.extend(Obj.prototype,{
   field1: "hi there",
   func1: function(){
     //do stuff
   }
});

这是 jQuery 内部使用的,jQuery.fn 是 jQuery.prototype 的别名:

jQuery.fn.extend({
   attr: function( name, value ) {
      return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
   },

   removeAttr: function( name ) {
       return this.each(function() {
                jQuery.removeAttr( this, name );
        });
   }, ...

【讨论】:

    【解决方案2】:

    你也可以这样做

    var p = Obj.prototype;
    
    p.newMethod = function(window.alert("Hi! I live"));
    p.newProperty = false;
    

    【讨论】:

    • 嗯,是的。我的意思是在那里有var。谢谢。
    【解决方案3】:

    也许只是:

    Obj.prototype = {
      run: function(){},
      fooBar: function(test1,test2){}  
    };
    

    ?

    【讨论】:

    • 缺点 - 如果适用:这会覆盖整个原型对象。您还会丢失到超类以及之前定义的任何属性和方法的链接。
    • 这将取代 Obj.prototype 并失去所有其他属性。
    【解决方案4】:

    看看 jQuery 和 YUI3 等库的“扩展”功能

    http://api.jquery.com/jQuery.extend/

    http://yuilibrary.com/yui/docs/yui/yui-extend.html http://yuilibrary.com/yui/docs/yui/yui-extend.html

    还请查看合并(jQuery、YUI3)和扩充(YUI3)以及用法。

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2010-09-15
      • 2021-05-05
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多