为什么我尝试:
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 :(得分: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所说),否则它将无法正常工作......