首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript IIFE 中建構函數傳參技巧:利用閉包參數直接初始化實例

     編輯:程式設計綜合問答

原始問題

(function() {
    function Fun(name) { this.name = name; }
    Fun.prototype.say = function() { console.log(this.name); }
    fun = new Fun();   // 未傳參
})();
fun.say('qwe');      // 想傳參但無效

解法:IIFE 接收參數並傳給建構函數

(function(name) {          // 1. IIFE 接收外部參數
    function Fun(name) { this.name = name; }
    Fun.prototype.say = function() { console.log(this.name); }
    fun = new Fun(name);     // 2. 建構時傳入
})('qwe');                   // 3. 立即呼叫並傳入 'qwe'

fun.say();                   // 輸出: qwe

原理解析

  • IIFE (立即呼叫函數表達式) 建立私有作用域,參數 name 只在該作用域有效。
  • 建構函數 Fun 內部 this.name 指向實例屬性,原型方法 say 讀取 this.name。
  • 外部變數 fun (隱性全域) 持有實例參考,後續可直接呼叫 fun.say()。

進階模式:模組化導出

const MyModule = (function(name) {
    function Fun(name) { this.name = name; }
    Fun.prototype.say = function() { console.log(this.name); }
    return new Fun(name);   // 直接回傳實例
})('qwe');

MyModule.say();  // qwe
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved