2009-12-19 58 views
0

为什么,如果我尝试:访问对象的一个​​方法成员在JavaScript

 
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。我必须给它一个价值吗?该对象已经创建并执行其功能之一!

+0

我希望你实际上并没有修改'Object.prototype'。这在某些浏览器中不起作用,并且会造成一般伤害世界。 – 2009-12-19 23:15:34

回答

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,它就可以工作,如果没有,您没有正确设置成员属性。就那么简单。

0

我相信你将不得不宣告对象作为一个函数(如MEDER说的),否则将无法正常工作......

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对象继承,所以不要将它重新定义为别的东西。

+0

我用对象作为通用对象,可以完全是objectX或其他东西。 – 2009-12-19 23:58:20

1

这工作:

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

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

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