我有代码:
function Contract() {
var contract = {};
contract.id = ...;
contract.date = ...;
contract.calculateTotal = function() {
...
}
return contract;
}
问题是 - Contract()的结果会怎样?是否每次使用= {}重新创建契约?这个问题与AngularJS模型层的设计有关。 Contract()应该用作创建新模型层对象的构造函数。 Contract()将是单例,真正的问题是 - 每次调用Contract()都会创建新对象,或者是否有一个合同对象位于singelton Contract()内,并且在每次契约调用中都返回相同的实例()吗
答案 0 :(得分:2)
问题是 - Contract()的结果会怎样?
它过着自己的生活,不会受到Contract
未来电话的影响。
每次使用= {}重新创建合同吗?
是的,每次调用该函数时,var
语句都会创建一个新变量。
Contract()将是单身人士
不是单身人士。
真正的问题是 - 如果每次调用Contract()都会创建新对象,或者是否有一个合同对象位于singelton Contract()内,并且每次调用Contract()都返回相同的实例?
Contract()
的每次通话都会创建一个新对象。
有几种方法可以实现单例。一种方法是将第一个创建的实例作为Contract
函数的属性进行跟踪:
function Contract() {
if (Contract.singleton) return Contract.singleton;
var contract = {};
contract.id = ...;
contract.date = ...;
contract.calculateTotal = function() {
...
}
// keep a reference in the singleton property of this constructor
return Contract.singleton = contract;
}
答案 1 :(得分:1)
每次调用Contract()
函数时,它都会创建一个新的空对象并将其分配给contract
,然后从函数返回它。所以,是的,每次调用函数都会返回一个新的对象实例,是的,它是由refernce返回的,因此返回的实例是在函数中创建并分配给contract
的实例。
答案 2 :(得分:1)
请尝试以下方法进行测试:
function contract() {
contract = {};
contract.id = 1;
contract.date = 1991;
return contract;
}
var contract1 = contract();
var contract2 = contract();
contract1.id = 2;
console.log(contract1); // Object {id: 2, date: 1991}
console.log(contract2); // Object {id: 1, date: 1991}
显然,每次调用合约时都会创建一个新对象。