创建一个对象onblur - 但只创建该对象一次

时间:2014-03-04 21:45:45

标签: javascript jquery

我需要在发生onblur事件时创建一个新对象:

function example(item) {

    this.item = $(item);

    this.item.blur(function() {
        var self = this;
        new testObject(self.item);
   }
}

但我只想创建一次testObject。每次发生模糊事件时我都不想要新对象。我想以某种方式创建它一次,然后在随后的模糊中运行该存储的对象。

2 个答案:

答案 0 :(得分:2)

“运行存储对象”是什么意思?你正在创建一个对象。你的意思是如果它不存在就创建它?如果是这样,那么:

var testObjectInstance = null;
function example(item) {
    this.item = $(item);

    this.item.blur(function() {
        var self = this;
        if (!testObjectInstance) testObjectInstance = new testObject(self.item);
   }
}

您还可以确保只执行一次事件处理程序:

var testObjectInstance;
function example(item) {
    this.item = $(item);

    this.item.one('blur', function() {
        var self = this;
        testObjectInstance = new testObject(self.item);
   }
}

jQuery对象的 one()方法将处理程序绑定到事件,但在执行一次后自动取消绑定。

答案 1 :(得分:1)

您可以使用在您用作事件处理程序的闭包中捕获的变量:

function example(item) {

    this.item = $(item);
    var testobj = null;
    var self = this;

    this.item.blur(function() {
        if (testobj === null) {
            testobj = new testObject(self.item);
        }
        // ... here use testobj ...
    });
}

请注意,self = this应该放在闭包之外,因为现在在示例代码中使用它并没有多大意义。