Это не проблема пространства имен - это то, как вы определяете и создаете экземпляр своего класса. Классы определяются как функции, а не как литералы объекта:
// define your class
ns.MyArray = function(w, h) {
this.width = w;
this.height = h;
};
// set the class prototype
ns.MyArray.prototype = [];
// instantiate
var a = new ns.MyArray(5,10);
a.push("Test");
a.length; // 1
a[0]; // "Test"
a.width; // 5
То, что вы делаете, это просто создаете литерал объекта, а затем присваиваете его переменной testArray
, как показано ниже:
var o = {};
var testArray = o;
testArray == o; // true
Я не уверен, ожидал ли я такого поведения, но похоже, что присвоение prototype
литерала объекта, например {width:0, height:0}
, добавляет нормальное поле с ключом "prototype" - фактический prototype
все еще Object
.