如何为HTML元素创建方法?

时间:2009-02-08 22:24:08

标签: javascript

我正在尝试创建一个简单,小巧且基本的JavaScript框架,仅用于学习目的。 但问题是我已经完全陷入了基础。

我正在尝试做这样的事情:

$('testdiv').testFunction();

我为此写的代码:

var elementID;
var smallFramework = {

  $:function(id) {
    this.elementID = id;
  },

  testFunction:function() {
    alert(this.elementID);
  }

};
window.$ = smallFramework.$;

但作为回报,我得到了:

$('testdiv) is undefined

任何人都可以帮我解决这个小而且希望简单的问题吗?

3 个答案:

答案 0 :(得分:2)

要获得您期望的行为,您需要使用$函数返回一个名为testFunction的方法的对象。 尝试:

var smallFramework = // an object for namespacing
{
  $:function(id) // the core function - returns an object wrapping the id
  {
    return {                    // return an object literal
      elementID: id,            // holding the id passed in
      testFunction: function()  // and a simple method
      {
         alert(this.elementID);
      }
    };
  }
};

当然,有many other ways来实现你想要的行为。

答案 1 :(得分:1)

如果您正在尝试向HTML元素添加方法,则可以按照以下方式执行操作。

$ = function( elementId ) {
    var element = document.getElementById( elementId );
    element.testFunction = function(){
        alert( this.id );
        return this; // for chaining
    }
    return element;
}

$('test').testFunction();

答案 2 :(得分:1)

smallFramework.$('testdiv'); 

代替。根据您发布的代码,这就是您的$函数结束的地方。

或者,看起来你正试图复制像jquery这样的东西。你可能想尝试这样的事情。

var $ = smallFramework = (function () {
   var f = 
   {

     find:function(id) {
       f.elementID = id;
       return f;  //every function should return f, for chaining to work
     },

     testFunction:function() {
       alert(f.elementID);
       return f;
     }

   }

return f.find  //the find function will be assigned to $. 
//and also assigned to smallFramework.
//the find function returns f, so you get access to testFunction via chaining
// like $("blah").testFunction()

})() //note this function gets called immediately.

这个代码看起来可能会让一些刚接触javascript的人感到困惑,因为它很大程度上取决于闭包的概念。我建议如果这没有意义,花一些时间在Douglas Crockford的javascript网站上。这很重要,因为如果您碰巧在find函数中使用“this”,上面的代码会咬人,因为当您从$或者使用它时,“this”将不会被绑定到f,正如您所期望的那样smallFramework。