什么是JavaScript中的实例

时间:2014-12-30 08:21:46

标签: javascript

最近我尝试用JavaScript学习设计模式。所以我选择Singleton Pattern作为我的第一个模式。但问题是当我读到这段代码时。

var Singleton = (function () {

    var instance;

    function createInstance() {
        var object = new Object("I am the instance");
        return object;
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = createInstance();
            }
            return instance;
        }
    };
})();

function run() {

    var instance1 = Singleton.getInstance();
    var instance2 = Singleton.getInstance();

    alert("Same instance? " + (instance1 === instance2));  
}

我只是想知道JavaScript中的实例是什么。似乎每个对象都有它的实例。我可以将其作为构造函数进行成像吗?

3 个答案:

答案 0 :(得分:0)

在这种情况下,

instance只是一个存储Object 实例的变量,该实例被捕获在闭包内,只能通过getInstance访问。

var Singleton = (function () {

    // 2. `instance` gets defined with value `undefined`
    var instance;

    // 3. `createInstance` gets declared inside the closure
    function createInstance() {
        // 8. `createInstance` creates an instance of `Object` and returns it
        var object = new Object("I am the instance");
        return object;
    }

    // 4. The closure returns an object with getInstance, and gets assigned to `Singleton`
    return {
        getInstance: function () {

            // 6. Check if `instance` refers to something
            if (!instance) {
                // 7. Which it doesn't, so it calls `createInstance` and assigns it to `instance`
                // where `instance` is the variable declared in the closure in step 2
                instance = createInstance();
            }
            // 9. Return whatever is assigned to `instance`
            // 11. since `instance` already points to something, return it
            return instance;
        }
    };

// 1. This function executes immediately
})();

function run() {

    // 5. `getInstance` is called and assigned to instance1
    var instance1 = Singleton.getInstance();

    // 10. `getInstance` is called again and assigns whatever is returned to instance2
    var instance2 = Singleton.getInstance();

    // instance1 === instance2 because `getInstance` returned the same thing.
    alert("Same instance? " + (instance1 === instance2));  
}

答案 1 :(得分:0)

想象一下,你有一个像这样的课程

Car { 
      var color, 
      var model, 
      var property
}

当你声明一辆新车时,你正在创建一个新的Car类实例,换句话说,你在“内存”上创建(这并非总是如此)一个新对象Car的新空间。 / p>

现在想象一下,在你的项目中你只需要一辆车,这辆车将一直都是一样的。 如果你想确保你只有一辆车,你需要使用单件模式。

如何运作?

单例模式使构造函数变为私有,而不是访问类的构造函数,您应该访问“getInstance”方法,此方法检查是否有任何类先生创建Car(返回示例),如果它是true返回先前为Car创建的同一实例,如果为false则创建一个新Car。

答案 2 :(得分:-1)

实例只不过是您在javascript中使用构造函数创建的对象。 Javascript没有任何称为类的东西,但你可以创建行为类似于类的函数。你可以通过使用" new"来调用它来实例化这个函数。关键词。以下是您的示例:

function class {
    this.name = 'John';
}

var instance = new class();
alert(instance.name); // this alerts "John"

现在,Singleton类总是返回相同的实例,而不管您在此类中实例化对象的次数。