【问题标题】:Accessing object's member in a method in javascript在javascript的方法中访问对象的成员
【发布时间】:2009-12-19 23:06:45
【问题描述】:

如果我尝试为什么:

Object(n) //构造函数 { this.member = n; } Object.prototype.alertX = function()// 方法 { 警报(this.member); } foo = 新对象(4); 对象.alertX;

我得到“this. member is not defined”。

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

编辑:我最初的目的是让一个内部方法访问已经创建的对象成员,而不是通过创建另一个对象来访问对象的方法,对象已经创建了!

谢谢!

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

【问题讨论】:

  • 我希望你实际上并没有修改Object.prototype。这在某些浏览器中不起作用,并且总体上会造成伤害。

标签: javascript prototype methods


【解决方案1】:

再次编辑...

您的构造函数接受 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 上,它就会起作用,如果不是,您没有正确设置成员属性。就这么简单。

【讨论】:

    【解决方案2】:

    编辑:针对您的更新代码进行了更新。

    因为构造函数只是函数,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 对象都继承自的构造函数,所以不要将它重新定义为其他东西。

    【讨论】:

    • 我使用 Object 作为通用对象,完全可以是 objectX 什么的。
    【解决方案3】:

    这行得通:

            function TestObj(n) {
            this.testMember = n;
        }
    
        TestObj.prototype.alertX = function() {
            alert(this.testMember);
        }
    
        foo = new TestObj(4);
        foo.alertX();
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-21
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        相关资源
        最近更新 更多