实例化后可从方法访问的Javascript局部变量?
因此,我正在温习我的香草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
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
?