我对此没有任何了解 初始化的区别 变量{}和命名函数 使用
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
包含对象A
的引用,因此更改referenceOfA.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
referenceOfA.B:-1
objectOfA.B:-1
答案 0 :(得分:1)
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;
}
注意:你不应该克隆单身人士。
答案 1 :(得分:1)
A已经是一个对象,因此new Object(A)
只返回A.您可以通过运行
var c = {};
alert(c === new Object(c));
所以没有克隆正在进行。
您实际上在尝试做什么,以及Singleton模式与此克隆业务有什么关系?
答案 2 :(得分:1)
对于克隆对象,您将需要做更多的工作。像下面的东西。
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();
希望这有帮助。