コンストラクターではオブジェクト(配列)をクラスプロパティに割り当て、その特定のインスタンスを拡張しているため、コードはこのようには機能しません。次に、新しい配列を割り当てる場合、その新しく作成された配列にはそのようなメソッドはありません。したがって、ソリューションは次のように変更できます。
function Selector() {
this.Status = "";
this.setGroups([]);
this.Errors = [];
}
Selector.prototype.myFunction = function() {
alert(this.length);
};
Selector.prototype.setGroups = function(groups) {
this.Groups = groups;
this.Groups.myFunction = this.myFunction;
};
var selector = new Selector();
selector.Groups.myFunction();
selector.setGroups([1,2,3]);
selector.Groups.myFunction();
selector.setGroups(['foo', 'bar']);
selector.Groups.myFunction();
デモ
ただし、そのような方法を使用することはお勧めしません。クラスGroupCollectionを作成し、そのプロパティとして配列をカプセル化することをお勧めします。
function GroupCollection(items) {
this.items = items || [];
}
GroupCollection.prototype.myFunction = function() {
alert(this.items.length);
};
function Selector() {
this.Status = "";
this.Groups = new GroupCollection();
this.Errors = [];
}
Selector.prototype.setGroups = function(groups) {
this.Groups.items = groups;
};
var selector = new Selector();
selector.Groups.myFunction();
selector.setGroups([1,2,3]);
selector.Groups.myFunction();
selector.setGroups(['foo', 'bar']);
selector.Groups.myFunction();
<ahref = "http://jsfiddle.net/f0t0n/6gRCH/2/"rel="nofollow">デモ