僅僅因爲你只傳遞一個參數。
function game()
{
var args = arguments;
this.size = function() { return args.length; };
}
function make_game()
{
return new game(arguments); // passing only one
}
function make_game2()
{
return new game(arguments[0], arguments[1], arguments[2]); // passing three
}
var my_game = make_game(4, 'a', true);
console.log(my_game.size()); // 1
var my_game2 = make_game2(4, 'a', true);
console.log(my_game2.size()); // 3
你可以使用另一個函數初始化對象
function game()
{
var args;
this.size = function() { return args.length; };
this.init = function(){
args = arguments;
}
}
function make_game()
{
var gm = new game();
gm.init.apply(gm, arguments);
return gm;
}
var my_game = make_game(4, 'a', true);
console.log(my_game.size()); // 3
這是展示它是如何工作的。強烈建議遵循基於原型的設計。
哇,這很有趣,而且比我的解決方案簡單得多。它的工作原理是因爲'bind'只爲正確的調用返回一個函數全部設置。很光滑。 –