代码之家  ›  专栏  ›  技术社区  ›  Ramiz Uddin

javascript:行为

  •  -3
  • Ramiz Uddin  · 技术社区  · 15 年前

    我对 A开头的区别 带和命名函数的变量 具有 new 关键字。我指的是哪一个 我应该练习一下 对象的定义。哪个更 适用于哪种情况?

    然后我做了一个小例子来测试 两种做法。和 我发现了一个非常简单的区别。 每当你在 随变量 {} ,该变量是 此对象的唯一引用 定义见 {} . {} 它本身 没有名字所以不能 要求用new初始化。只有一个 引用可用于获取它。

    看来我们可以很容易地实现 使用的对象上的单例模式。 我看到的你不能拥有超过 一个的实例甚至不能 应用克隆如果你这样做,你将得到 只有该对象的引用。

    我的行为是否正确? {}?

    var A = {
     B : 0
    };
    
    // A is an object?
    document.write("A is an " + typeof A);
    

    让我们尝试克隆对象 A

    var objectOfA = new Object(A);
    objectOfA.B = 1;
    
    //Such operation is not allowed!
    //var objectOfA = new A();
    
    var referenceOfA = A;
    referenceOfA.B = -1;
    
    document.write("A.B: " + A.B);
    document.write("<br/>");
    

    以上 referenceOfA.B 保存对象的引用 ,因此更改 参考文献B 肯定反映在 A.B .

    document.write("referenceOfA.B: " + referenceOfA.B);
    document.write("<br/>");
    

    如果克隆成功,那么 objectOfA 应保持值 1

    document.write("objectOfA.B: " + objectOfA.B);
    document.write("<br/>");
    

    结果如下:

    A是对象

    A. B:- 1

    参考A.B:-1

    B.:- 1

    3 回复  |  直到 13 年前
        1
  •  1
  •   NT_    15 年前

    This 可能有用,摘录:

    CatNames.instance = null; // Will contain the one and only instance of the class
    
    // This function ensures that I always use the same instance of the object
    CatNames.getInstance = function() {
            if (CatNames.instance == null) {
                    CatNames.instance = new CatNames();
            }
            return CatNames.instance;
    }
    

    注意:不应该克隆单例。

        2
  •  1
  •   Tim Down    15 年前

    a已经是一个对象,因此 new Object(A) 只需返回A。您可以通过运行

    var c = {};
    alert(c === new Object(c));
    

    所以没有克隆。

    你到底想做什么,单例模式与克隆业务有什么关系?

        3
  •  1
  •   Laurent Zuijdwijk    13 年前

    对于克隆对象,您需要做更多的工作。像下面这样。

    var a = {
        val:1, 
        clone : function(){
           return {val: a.val, clone : a.clone}
        }
    };
    var b = a.clone();
    b.val = 2;
    console.log(a);
    console.log(b);
    

    现在您可以克隆一个对象并更改它的值。如果要克隆更复杂的对象,可以为此编写递归函数。

    可以将这些对象文本用作静态类或具有键/值对的对象。

    如果要使用非静态类(排序),请使用以下内容:

    var MyClass = new function(){}
    MyClass.prototype = { 
        val : 1
    };
    var a = new MyClass();
    

    希望这有帮助。