Javascript 创建所有原型函数都可以访问的局部变量

Javascript 创建所有原型函数都可以访问的局部变量,javascript,prototype,Javascript,Prototype,我试图使用prototype向对象添加函数,我想我理解了整个概念,所以我做了如下工作: function ImgContainer() { var current_image = 1; } ImgContainer.prototype = { init: function() { //initialize }, scrollLeft: function(){ //scroll left } } var imgContai

我试图使用prototype向对象添加函数,我想我理解了整个概念,所以我做了如下工作:

function ImgContainer() {
    var current_image = 1;
}

ImgContainer.prototype = {
    init: function() {
        //initialize
    },
    scrollLeft: function(){
        //scroll left
    }
}

var imgContainer = new ImgContainer();
我假设我可以在init和scrollLeft中访问当前的_图像,但是我得到了未捕获的引用错误:当前的_图像没有定义


我应该怎么做才能使一个变量在init和scrollLeft函数中都可以访问?

您可以将它添加为实例化对象的属性:

function ImgContainer() {
    this.current_image = 1;
}
然后访问函数中的属性:

ImgContainer.prototype = {
    init: function() {
        alert(this.current_image);
    },
    scrollLeft: function(){
        //scroll left
    }
}

您仍然可以在方法中使用短期变量临时存储内容,以完成该方法的工作。但是您将对象的状态存储在其属性中。

您无法通过对象外部的原型方法访问对象的私有成员,因为它们不在范围内。你应该这样做:

function ImgContainer() {
    var current_image = 1;
    this.init = function() {
        current_image = 'something_blahblah';
    }
}

var imgContainer = new ImgContainer();

您无法访问
init
scrollLeft
中的变量,因为它不在词法范围内(即
init
scrollLeft
都不在
ImageContainer
函数中)。。当使用[[原型] ]时,我发现使用属性更容易(例如,代码>这个.CurrutySimultI/Cuth>),而不是变量。它们不是对象的成员,它们是普通变量。但是我们可以将它们视为私有成员,因为只要对象存在,它们就可以使用。我把它们称为private,是的,但是变量和对象属性之间有区别。例如,对象属性可以
delete
删除。还有大量处理对象属性的方法。有setter、getter、defineProperty等。嗯,我对javascript中的delete不太了解,我以前在js中从未使用过它。我将学习以下内容:)使用此方法,不能使用原型继承。由于OP专门询问原型,并且没有提到需要私有变量,我认为这不是他们想要的。谢谢!还有一个问题,如果我在init中有另一个函数,它也必须访问当前的_映像,我应该怎么做?我已经在init中使用了一个局部变量来存储当前的_映像,但是我无法访问它,因为它再次超出了范围…@shibbydoo您不应该在函数中包含函数,而应该只包含方法。无论如何,init中的函数也可以访问属性。