在javascript中访问方法中的对象成员

时间:2009-12-19 23:06:45

标签: javascript prototype methods

为什么我尝试:

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

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

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

我得到“这个。成员没有被定义”。

如何在其中一个方法中访问构造函数的成员?

EDITED:我最初的目的是让一个内部方法访问已经创建的对象成员,而不是从创建另一个对象访问该对象的方法,该对象已经创建了!

谢谢!

编辑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 个答案:

答案 0 :(得分:3)

再次编辑......

您的构造函数接受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并且它将起作用,否则您没有正确设置成员属性。就这么简单。

答案 1 :(得分:1)

编辑:已更新以更新您的更新代码。

因为构造函数只是函数而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对象继承的构造函数,因此不要将其重新定义为其他内容。

答案 2 :(得分:1)

这有效:

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

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

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

答案 3 :(得分:0)

我相信你必须将Object声明为一个函数(正如meder所说),否则它将无法正常工作......