javascript对象方法可以成为一个动作吗?

时间:2012-07-13 04:55:30

标签: javascript events object methods

我对javascript对象有点困惑,比如说我有下面的DOM

<div class='of'></div>
<div class='of'></div>
<div class='of'></div>
<div class='of'></div>

 //select all of them 
  var fof = $('.of')

那么fof是一个有4个DOM对象的数组吗?我可以将fof视为javascript对象,并定义一些方法,如:

fof = {
  open:function(){

   }
 }

是否有可能为fof定义一些'动作';比如点击dblclick,所以当'action'发生时(就像一个事件处理程序),调用一些方法!稳定的硬编码

fof.click(function(){

})

我该怎么做?

2 个答案:

答案 0 :(得分:1)

好的,首先是基础知识。在Javascript中,函数是第一类对象。这意味着你可以这样做:

var foo = function() { return 1 + 1;};

你可以这样做:

var foo = 5;

在Javascript中,所有真实对象(几乎除了基元之外的所有对象)都具有属性。可以将这些属性设置为可以将变量设置为的任何内容:

var foo = {};
foo.bar = function() { return 1 + 1; }
foo.baz = 5;

每当你看到一个对象上使用的方法时,你就会看到被设置为正在运行的属性的函数。

由于jQuery结果对象(例如$('.of'))(它不仅仅是一个数组)是一个Javascript对象,它可以具有属性,这些属性可以是函数。所以你绝对可以做到:

var fof = $('.of')
fof.foo = function() { return 1 + 1; };
fof.foo();

最后,您询问了如何制作类似jQuery的事件。使用jQuery很容易做到这一点。这是一个简单的例子:

var fakeObject = {};
fakeObject.fakeMethod = function() {
    // do something 
    $.trigger(this, 'myFakeClick');
}

var fakeObjectWatcher = {}
fakeObjectWatcher.react = function() { alert('someone did something'); };
$(fakeObject).on('myFakeClick', fakeObjectWatcher.react);

fakeObject.fakeMethod(); // triggers myFakeClick event
// fakeObjectWatcher will now alert "someone did something"

答案 1 :(得分:0)

抱歉,最后的答案很简短。我假设你正在使用jquery 如果不包括在您的:      
    

最好在您的文档准备部分中完成附加事件,您也可以将其放入。 所以这就是一切都会是这样的。

$(document).ready(function() {
    ($'.of').click(function () {
        $(this).do something or function($this) 
    });//end click
});//end ready

如果你想循环并对所有人做些什么。那么......     $('。of')。each(function(){         //做一点事     });

这里不要过多担心匿名函数,请务必使用它们。如果你想要了解它们是什么,谷歌搜索“匿名函数”,“lamda表达式”或“函数式编程”应该让你忙一段时间。