Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实例化后可从方法访问的Javascript局部变量?_Javascript_Variables_Object_Scope_Instantiation - Fatal编程技术网

实例化后可从方法访问的Javascript局部变量?

实例化后可从方法访问的Javascript局部变量?,javascript,variables,object,scope,instantiation,Javascript,Variables,Object,Scope,Instantiation,因此,我正在温习我的香草Javascript,特别是针对动画的,我遇到了一个包含以下代码的教程: function sprite(options){ var spr = {}, frameIndex = 0, tickCount = 0, ticksPerFrame = options.ticksPerFrame || 0, numberOfFrames = options.numb

因此,我正在温习我的香草Javascript,特别是针对动画的,我遇到了一个包含以下代码的教程:

function sprite(options){

        var spr = {},
            frameIndex = 0,
            tickCount = 0,
            ticksPerFrame = options.ticksPerFrame || 0,
            numberOfFrames = options.numberOfFrames || 1;

        spr.context = options.context;
        spr.width = options.width;
        spr.height = options.height;
        spr.image = options.image;
        spr.loop = options.loop;

        spr.render = function(){
            console.log("render");
            //console.log("height: ", spr.height);
            //console.log("width: ", spr.width);
            //console.log("context: ", spr.context);
            //console.log("image: ", spr.image);

            // Clear Canvas
            spr.context.clearRect(0, 0, spr.width, spr.height);

            // Draw animation
            spr.context.drawImage(
                spr.image,
                frameIndex * spr.width / numberOfFrames,
                0,
                spr.width / numberOfFrames,
                spr.height,
                0,
                0,
                spr.width / numberOfFrames,
                spr.height
            );
        };

        spr.update = function(){
            tickCount += 1;

            if (tickCount > ticksPerFrame){
                tickCount = 0;

                if (frameIndex < numberOfFrames - 1){
                    frameIndex += 1;
                } else if (spr.loop) {
                    frameIndex = 0;
                }
            }
        };

        return spr;
    }
功能精灵(选项){
var spr={},
frameIndex=0,
滴答数=0,
ticksPerFrame=options.ticksPerFrame | | 0,
numberOfFrames=选项。numberOfFrames | | 1;
spr.context=options.context;
spr.width=options.width;
spr.height=options.height;
spr.image=options.image;
spr.loop=options.loop;
spr.render=函数(){
控制台日志(“呈现”);
//控制台日志(“高度:”,spr.height);
//console.log(“宽度:”,spr.width);
//日志(“上下文:”,spr.context);
//日志(“图像:”,spr.image);
//透明帆布
spr.context.clearRect(0,0,spr.width,spr.height);
//绘制动画
spr.context.drawImage(
spr.image,
帧索引*spr.width/numberOfFrames,
0,
spr.宽度/帧数,
spr.高度,
0,
0,
spr.宽度/帧数,
spr.高度
);
};
spr.update=函数(){
滴答数+=1;
如果(滴答声>滴答声帧){
滴答数=0;
if(frameIndex
我理解所有的逻辑和一切,但你是怎么理解的

  • frameIndex
  • tickCount
  • ticksPerFrame
  • numberOfFrames
返回
spr
后,是否可以从
render()
update()
方法访问?据我所知,它们是
sprite
函数的本地函数,在实例化后不应访问。

它们是
sprite
函数的本地函数

您提到的其他函数是在
sprite
函数中定义的,因此可以访问其范围内的任何变量


sprite
函数完成后,它们仍然可用,因为它们已返回。这称为。

因此,如果实例化其他对象,它们是否都从相同的变量中提取,或者它们是否有自己的副本,就像它们被定义为
spr.varname