在JavaScript中跨原型方法访问变量的更好方法?

在JavaScript中跨原型方法访问变量的更好方法?,javascript,prototype,Javascript,Prototype,我经常使用主JavaScript构造函数的模式,并向其原型对象添加方法,以便用户能够直观地调用它们,例如: function Slideshow(options) { this.options = options this.slideshow = $('#slideshow') //more variables here } Slideshow.method1 = function () { this.slideshow.addClass('test') //

我经常使用主JavaScript构造函数的模式,并向其原型对象添加方法,以便用户能够直观地调用它们,例如:

function Slideshow(options) {
    this.options = options
    this.slideshow = $('#slideshow')
    //more variables here
}

Slideshow.method1 = function () {
    this.slideshow.addClass('test') // do something with slideshow variable
};

Slideshow.method2 = function () {
    // another method
};
这个模式真正让我感到困扰的一件事是,为了让所有原型方法都可以访问变量,我必须在构造函数中的每个变量前面添加“this”。这是一个巨大的痛苦,我忍不住想有一个更优雅的方式来做到这一点

如果我放弃使用prototype对象,而只是将方法添加为实例方法,我知道我无法回避这个问题,但我喜欢它的效率?以及这种模式的自封装特性。对于更好的模式还有其他建议吗?谢谢

这是一个巨大的痛苦

不,真的不是。每个JavaScript开发人员都使用这种语法。如果你在Ruby或Python中,你会使用
self.
,在PHP中你会使用
$this->
。有些语言,如C++,不需要任何特殊的装饰器,但JavaScript确实。 我忍不住想有一个更优雅的方法来做到这一点

不,没有

这是JavaScript的语法,您无法更改它,也无法解决它。如果要访问
this
的属性,则需要在属性名称之前添加
this.
。否则,你说的是全局变量

如果你想要一个不同的语法,考虑一个不同的语言,比如编译成JavaScript。< /P> 这是一个巨大的痛苦

不,真的不是。每个JavaScript开发人员都使用这种语法。如果你在Ruby或Python中,你会使用
self.
,在PHP中你会使用
$this->
。有些语言,如C++,不需要任何特殊的装饰器,但JavaScript确实。 我忍不住想有一个更优雅的方法来做到这一点

不,没有

这是JavaScript的语法,您无法更改它,也无法解决它。如果要访问
this
的属性,则需要在属性名称之前添加
this.
。否则,你说的是全局变量

如果你想要一个不同的语法,考虑一个不同的语言,比如编译成JavaScript。< /P> 这是一个巨大的痛苦

不,真的不是。每个JavaScript开发人员都使用这种语法。如果你在Ruby或Python中,你会使用
self.
,在PHP中你会使用
$this->
。有些语言,如C++,不需要任何特殊的装饰器,但JavaScript确实。 我忍不住想有一个更优雅的方法来做到这一点

不,没有

这是JavaScript的语法,您无法更改它,也无法解决它。如果要访问
this
的属性,则需要在属性名称之前添加
this.
。否则,你说的是全局变量

如果你想要一个不同的语法,考虑一个不同的语言,比如编译成JavaScript。< /P> 这是一个巨大的痛苦

不,真的不是。每个JavaScript开发人员都使用这种语法。如果你在Ruby或Python中,你会使用
self.
,在PHP中你会使用
$this->
。有些语言,如C++,不需要任何特殊的装饰器,但JavaScript确实。 我忍不住想有一个更优雅的方法来做到这一点

不,没有

这是JavaScript的语法,您无法更改它,也无法解决它。如果要访问
this
的属性,则需要在属性名称之前添加
this.
。否则,你说的是全局变量


如果你想要一个不同的语法,考虑一个不同的语言,比如编译成JavaScript。

MyGER在讨论访问公共实例属性或方法时已经总结了很多东西。你必须在前面使用

这个
,因为这就是语言的工作原理

但是,如果您有私有实例属性或方法,则可以将它们定义为构造函数中的局部变量,并且可以在不使用
this
的情况下访问它们

function slideshow(options) {
    // no need to resave the options arguments as they can be used
    // directly from the argument variable

    // define a per-instance private variable that other methods defined
    // within the constructor can use directly without the use of `this`
    var theShow = $(options.selector || '#slideshow');

    // define public methods
    this.method1 = function() {
        // can access private instance variable here without this in front of it
        theShow.addClass('test');
    }

    this.method2 = function() {
        theShow.addClass(options.decoaration);
    }
}
此通用设计模式如下所述:


实际上,,这是因为在构造函数中声明了公共方法的构造函数创建了一个在对象生存期内持续的闭包,因此构造函数中的局部变量成为每个实例变量,只能从构造函数中声明的函数访问。

如果您正在谈论访问公共实例属性或方法。你必须在前面使用
这个
,因为这就是语言的工作原理

但是,如果您有私有实例属性或方法,则可以将它们定义为构造函数中的局部变量,并且可以在不使用
this
的情况下访问它们

function slideshow(options) {
    // no need to resave the options arguments as they can be used
    // directly from the argument variable

    // define a per-instance private variable that other methods defined
    // within the constructor can use directly without the use of `this`
    var theShow = $(options.selector || '#slideshow');

    // define public methods
    this.method1 = function() {
        // can access private instance variable here without this in front of it
        theShow.addClass('test');
    }

    this.method2 = function() {
        theShow.addClass(options.decoaration);
    }
}
此通用设计模式如下所述:


实际上,,这是因为在构造函数中声明了公共方法的构造函数创建了一个在对象生存期内持续的闭包,因此构造函数中的局部变量成为每个实例变量,只能从构造函数中声明的函数访问。

如果您正在谈论访问公共实例属性或方法。你必须在前面使用
这个
,因为这就是语言的工作原理

但是,如果您有私有实例属性或方法,则可以将它们定义为构造函数中的局部变量,并且可以在不使用
this
的情况下访问它们

function slideshow(options) {
    // no need to resave the options arguments as they can be used
    // directly from the argument variable

    // define a per-instance private variable that other methods defined
    // within the constructor can use directly without the use of `this`
    var theShow = $(options.selector || '#slideshow');

    // define public methods
    this.method1 = function() {
        // can access private instance variable here without this in front of it
        theShow.addClass('test');
    }

    this.method2 = function() {
        theShow.addClass(options.decoaration);
    }
}
此通用设计模式如下所述:

实际上,这是有效的,因为在构造函数中声明了公共方法的构造函数创建了一个在对象生存期内持续的闭包,因此构造函数中的局部变量变成了每个实例变量