Доступ к члену объекта в методе в JavaScript - PullRequest
0 голосов
/ 20 декабря 2009

Почему, если я попробую:

Object(n) //Constructor
{
this.member = n;
}

Object.prototype.alertX = function()// Method
{
alert(this.member);
}

foo = new Object(4);
Object.alertX;

Я получаю "this. Member is notfined".

Как я могу получить доступ к члену конструктора внутри одного из его методов?

РЕДАКТИРОВАНИЕ: моя первоначальная цель - иметь внутренний метод для доступа к уже созданному члену объекта, а не для доступа к методу объекта при создании другого объекта, объект уже создан!

Спасибо!

ИЗД. 2:

Попробовал это:

var fooObj = function(x,y,z){ // Map object constuctor.
    this.x = x;
    this.y = y;
    this.z = y;
}
fooObj.prototype.test = function(){
    alert(this.x);
}

***initialization****
something = new fooObj();
something.otherMethod(x,y,z); <--- draws an object, a canvas, for example.
document.getElementById('canvas').addEventListener('mouseup', something.test, false);

Когда я нажимаю на объект, должен срабатывать сигнал тревоги, но при этом this.x не определяется. Должен ли я дать ему значение? Объект уже был создан и выполнил одну из своих функций!

Ответы [ 4 ]

3 голосов
/ 20 декабря 2009

Отредактировано снова ...

Ваш конструктор принимает 3 аргумента и устанавливает их для объекта. Вы не кормите их при первоначальном вызове. Теперь, если вы не оставили больше информации, измените ее на:

var fooObj = function(x,y,z){ // Map object constuctor.
    this.x = x;
    this.y = y;
    this.z = y;
}
fooObj.prototype.test = function(){
    alert(this.x);
}

var something = new fooObj(x,y,z);
something.otherMethod(x,y,z); <--- draws an object, a canvas, for example.

В противном случае, если вы что-то упускаете, вставьте ВСЮ копию вашего кода, чтобы не тратить время.

Снова, чтобы повторить, удостоверьтесь, что свойства установлены. В противном случае объяснение состоит в том, что они не устанавливаются, простое объяснение.

function Member(n) {
    this.member = n;
};

Member.prototype.memberNumber = function() { alert( this.member ) };

var john = new Member(1);
john.memberNumber()

Или

function Custom() {
    this.member = 2;
};

Object.prototype.alertX = function() {
    alert( this.member )
}

var x = new Custom();
x.alertX()

"ИЗДАНО: моя первоначальная цель заключается в иметь внутренний метод доступа к уже созданный элемент объекта, а не получить доступ к методу объекта из создание другого объекта, объект уже создан! "

Какой бы конструктор вы ни использовали или какое бы свойство вы ни задавали, убедитесь, что оно установлено. Затем просто присоедините метод к предупреждению прототипа this.member, и он будет работать, если вы не правильно установили свойство member. Все просто.

1 голос
/ 20 декабря 2009

Это работает:

        function TestObj(n) {
        this.testMember = n;
    }

    TestObj.prototype.alertX = function() {
        alert(this.testMember);
    }

    foo = new TestObj(4);
    foo.alertX();
1 голос
/ 20 декабря 2009

Редактировать: обновлено для вашего обновленного кода.

Поскольку конструкторы являются просто функциями, а Object(n) { this.member = n } совпадает с

Object(n); // this will throw a reference error as n is undefined
{ // this is a code block
  this.member = n; // this will also throw a reference error as n is undefined
}

Чтобы создать нужный конструктор, используйте это:

var MyConstructor = function (n) {
  this.member = n;
};

Кроме того, Object уже является конструктором, от которого наследуются все объекты JavaScript, поэтому не переопределяйте его как нечто другое.

0 голосов
/ 20 декабря 2009

Полагаю, вам придется объявить Object как функцию (как сказал медер), иначе он не будет работать правильно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...