Về cơ bản, tôi có một nhà xây dựng như thế này:Đi qua tất cả các đối số cho một constructor
function A() {
this.content = toArray(arguments); // toArray converts it to an array
}
Tôi muốn gọi nó là từ chức năng khác:
function B() {
return new A();
}
Vấn đề là, tôi muốn cũng như chuyển tất cả các đối số được chuyển đến B
, tới A
.
tôi không thể sử dụng apply
(trong một cách phổ biến):
- Nó sẽ không thể là một nhà xây dựng nếu tôi chỉ
apply
nó cho bất kỳ đối tượng cũ - tôi không thể
apply
nó vàoprototype
, trừ khi có một cách dễ dàng để sao chép nó mà tôi không biết về - Tôi không thể chỉ cần tạo một
new A
để chuyển sang lại; trong thực tế,A()
ném nếu nó không được chuyển bất kỳ đối số nào và tôi muốn giữ chức năng này.
Tôi đã đưa ra một số giải pháp:
constructor khác!
function C() {} C.prototype = A.prototype; function B() { var obj = new C(); A.apply(obj, arguments); return obj; }
Một chức năng khác!
function _A(_arguments) { if(_arguments.length === 0) { return this; } // Do initialization here! } _A.prototype.constructor = A; function A() { if(arguments.length === 0) { throw new Error("That's not good."); } return new _A(toArray(arguments)); } function B() { return new _A(toArray(arguments)); }
Phần còn lại trong số đó là khá nhiều điều tương tự trong một định dạng khác nhau
Nhưng có một cách thực sự dễ dàng và rõ ràng để làm điều này?
'Object.create' là hoàn hảo. Cảm ơn bạn! – Ryan
@minitech: Bạn được chào đón. –