JavaScript 創(chuàng)建對象 7 穩(wěn)妥構(gòu)造函數(shù)模式

首先,穩(wěn)妥對象,指的是沒有公共屬性,而且其方法也不引用 this 的對象。穩(wěn)妥對象最適合在一些安全的環(huán)境中(這些環(huán)境中會禁止使用 this 和 new),或者在防止數(shù)據(jù)被其他應(yīng)用程序(如 Mashup 程序)改動時使用。穩(wěn)妥構(gòu)造函數(shù)遵循與寄生構(gòu)造函數(shù)類似的模式,但有兩點不同:一是新創(chuàng)建對象的實例方法不引用 this;二是不使用 new 操作符調(diào)用構(gòu)造函數(shù)。按照穩(wěn)妥構(gòu)造函數(shù)的要求,可以將前面的 Person 構(gòu)造函數(shù)重寫如下:

        function Person(name, age, job) {
            var o = new Object;
            // 可以在這里定義私有的變量和函數(shù)
            o.sayName = function() {
                console.log(name);
            }
            return o;
        }
        var person1 = new Person("Neo", 29, "Software Engineer");
        person1.sayName();

注意,在以這種模式創(chuàng)建的對象中,除了使用 sayName() 方法外,沒有其他辦法訪問 name 的值。即使有其他代碼會給這個對象添加方法或數(shù)據(jù)成員,但也不可能有別的辦法訪問傳入到構(gòu)造函數(shù)中的原始數(shù)據(jù)。穩(wěn)妥構(gòu)造函數(shù)模式提供的這種安全性,使得它非常適合在某些安全執(zhí)行環(huán)境下使用。

注意:與寄生構(gòu)造函數(shù)模式類似,使用穩(wěn)妥構(gòu)造函數(shù)模式創(chuàng)建的對象與構(gòu)造函數(shù)之間也沒有什么關(guān)系,因此 instanceof 操作符對這種對象也沒有意義。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容