Это возможно, и ваша закомментированная функция z
должна работать как есть, если вы исправите способ создания x
s.
Обратите внимание, что ваша функция y
не должна быть объявлена внутри конструктора, если она имеет дело только со свойствами экземпляра (что в вашем коде), и это требует значительных затрат памяти (каждый экземпляр получает его собственная копия этой функции). Вы можете сделать это только в том случае, если это абсолютно необходимо по причинам скрытия основных данных с учетом связанных с этим затрат.
Редактировать: Извините, я что-то упустил: Вам не хватает ключевого слова new
, ваши примеры должны быть:
new x(123).y();
new x(123).z();
... и ваш конструктор не должен возвращать this
.
Полный пример:
var x = function(param) {
this.data=param;
// Doesn't have to be in the constructor, and you should
// avoid it unless you're doing something with major
// data hiding a'la Crockford
this.y = function() {
alert(this.data)
}
}
x.prototype.z = function() {
alert(this.data);
}
new x(123).y();
new x(123).z();
Это статья Крокфорда Я упоминал выше, но, опять же, это имеет большое значение для памяти.