猿问

js的单例模式,重写构造函数,为什么new了两次只执行了一次重写的那个构造函数

function Universe() {

    // 缓存的实例

    var instance = this;


    // 其它内容

    this.start_time = 0;

    this.bang = "Big";


    // 重写构造函数

    Universe = function () {

        alert(1)

        return instance;

        //改成return this,uni2.bang是undefined

    };

}


// 测试

var uni = new Universe();

var uni2 = new Universe();

uni.bang = "123";

console.log(uni === uni2); // true

console.log(uni2.bang); // 123

这里new了两次Universe(),只alert了一次1,为什么呢?
然后重写构造函数里,把 return instance;改成return this,uni2.bang是undefined,两个有什么区别呢?

弑天下
浏览 879回答 1
1回答

梦里花落0921

你return instance 的时候,返回的是上面那个 Universe() 作用域内的this,所以可以获取到 this.bangUniverse = function () {    alert(1)    // 这里返回的this 是当前这个 function作用域内的 this。没有任何属性    return instance;};
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答