【问题标题】:Pass a js object's attribute into its method将 js 对象的属性传递给它的方法
【发布时间】:2013-06-26 15:09:39
【问题描述】:

我有一个对象,它有一个使用属性的方法。我是否正确使用了该属性?

function TestObject(words) {
  this.words = words;

  function alertStuff() {
    console.log(this.words);
  }
}

doItPlease = new TestObject('say something!');
doItPlease.alertStuff();

【问题讨论】:

    标签: javascript jquery oop this


    【解决方案1】:

    属性和变量在 JavaScript 中是不同的。

    this.alertStuff = function() {
        console.log(this.words);
    }
    

    您示例中的this 包含对新对象的引用。构造函数中的任何参数/变量都与该对象没有直接关系。


    更惯用的是将函数添加到公共原型对象而不是每个实例。

    TestObject.prototype.alertStuff = function() {
        console.log(this.words);
    }
    

    其工作原理是,当您执行doItPlease.alertStuff() 时,alertStuff 中的this 的值会自动设置为doItPlease 对象。因此,alertStuff() 方法可以访问该对象及其所有属性。

    因为您从 TestObject 构造函数创建的所有实例在它们的原型链中都有相同的 TestObject.prototype 对象,所以内存开销更少,因为它们都共享相同的函数。

    【讨论】:

    • 非常感谢,这更清楚了!是否可以在对象定义的花括号内定义方法?我不想让一个代码块定义我的对象,而另一个代码块扩展它的原型:)
    • @DonnyP:我不确定对象定义的花括号是什么意思。这里唯一的花括号定义了函数体。而且我不确定一个定义对象的代码块和另一个扩展原型的代码块是什么意思。你能解释一下你想避免什么吗?
    • @DonnyP 是的,这是可能的。这称为闭包。闭包内的函数只在作用域内可用。
    猜你喜欢
    • 2017-06-21
    • 2011-06-30
    • 1970-01-01
    • 2015-08-18
    • 2011-09-20
    • 1970-01-01
    • 2019-06-01
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多