2

デバッグ時に問題なく、obj コンストラクターを名前空間に保持したいと考えています。

現在、次のようなコードがあります。

var namespace = {};
namespace.myConstructor = function(){};
// ----------- debug in console
(new namespace.myConstructor()); // -> namespace.myConstructor {}
(new namespace.myConstructor()).constructor; // -> function (){}

コンストラクターが匿名であることは好きではありません。だから私は他の方法でそれを行うことができます:

(より良い、しかし醜い)

var namespace = {};
namespace.myConstructor = (function(){
  function myConstructor(){};
  return myConstructor;
})();
// ----------- debug in console
(new namespace.myConstructor()); // -> myConstructor {}
(new namespace.myConstructor()).constructor; // -> function myConstructor(){}

または(最も美しく最短の方法)

namespace.myConstructor = function myConstructor(){};
// ----------- debug in console
(new namespace.myConstructor()); // -> myConstructor {}
(new namespace.myConstructor()).constructor; // -> function myConstructor(){}

しかし、NFE (Named Function Expression) にはいくつかの問題があることをここで読みました。

どちらの方法が良いですか?どの方法が良い方法ですか?

4

1 に答える 1

0

IE8 の問題は誇張されており、実際にはまったく問題になりません。関数は名前で関数を参照できない短命の IIFE で宣言されるためです。コードは実際のブラウザでは機能しません。

コンストラクター名は大文字にすることを忘れないでください。

(function(){
    var namespace = {
        MyConstructor: function MyConstructor() {

        },

        ...
    }
})();
于 2013-07-06T13:51:43.363 に答える