是什么使这两个函数分别为 'public' 和 'private',这意味着什么?
What makes these two functions 'public' and 'private' respectively, and what does that mean?
这两个函数来自我正在学习的课程 (https://www.udacity.com/course/front-end-web-developer-nanodegree--nd001)。代码和评论来自课程提供者:
/* This is the publicly accessible image loading function. It accepts
* an array of strings pointing to image files or a string for a single
* image. It will then call our private image loading function accordingly.
*/
function load(urlOrArr) {
if(urlOrArr instanceof Array) {
/* If the developer passed in an array of images
* loop through each value and call our image
* loader on that image file
*/
urlOrArr.forEach(function(url) {
_load(url);
});
} else {
/* The developer did not pass an array to this function,
* assume the value is a string and call our image loader
* directly.
*/
_load(urlOrArr);
}
}
/* This is our private image loader function, it is
* called by the public image loader function.
*/
function _load(url) {
if(resourceCache[url]) {
/* If this URL has been previously loaded it will exist within
* our resourceCache array. Just return that image rather
* re-loading the image.
*/
return resourceCache[url];
} else {
/* This URL has not been previously loaded and is not present
* within our cache; we'll need to load this image.
*/
var img = new Image();
img.onload = function() {
/* Once our image has properly loaded, add it to our cache
* so that we can simply return this image if the developer
* attempts to load this file in the future.
*/
resourceCache[url] = img;
/* Once the image is actually loaded and properly cached,
* call all of the onReady() callbacks we have defined.
*/
if(isReady()) {
readyCallbacks.forEach(function(func) { func(); });
}
};
/* Set the initial cache value to false, this will change when
* the image's onload event handler is called. Finally, point
* the image's src attribute to the passed in URL.
*/
resourceCache[url] = false;
img.src = url;
}
}
为什么 load()
是 "publicly accessible" 而 _load()
是 "private"? public/private 在这种情况下是什么意思?
如果您需要,完整文件位于 https://github.com/YolkFolkDizzy/frontend-nanodegree-arcade-game/blob/master/js/resources.js
它是私有的,因为它不能被直接调用...见第 105 行:
window.Resources = {
load: load,
get: get,
onReady: onReady,
isReady: isReady
};
由于该方法是在范围内声明的,因此在其他任何地方都将不可用。
可以看到代码写在里面:
(function() {
...
})()
它强制将任何函数声明或变量声明附加到当前作用域。没有这个,变量通常会附加到最近的当前对象 window。因此 _load
永远不会导出,调用它的唯一方法是调用 Resource
对象中 window
上导出的方法之一。
- Public 是什么时候可以从外面调用。
- 私有是指某些东西只能从内部调用。
在 Javascript 中,私有属性通常隐藏在一个范围内,仅对在该范围内创建的函数可用。
这两个函数来自我正在学习的课程 (https://www.udacity.com/course/front-end-web-developer-nanodegree--nd001)。代码和评论来自课程提供者:
/* This is the publicly accessible image loading function. It accepts
* an array of strings pointing to image files or a string for a single
* image. It will then call our private image loading function accordingly.
*/
function load(urlOrArr) {
if(urlOrArr instanceof Array) {
/* If the developer passed in an array of images
* loop through each value and call our image
* loader on that image file
*/
urlOrArr.forEach(function(url) {
_load(url);
});
} else {
/* The developer did not pass an array to this function,
* assume the value is a string and call our image loader
* directly.
*/
_load(urlOrArr);
}
}
/* This is our private image loader function, it is
* called by the public image loader function.
*/
function _load(url) {
if(resourceCache[url]) {
/* If this URL has been previously loaded it will exist within
* our resourceCache array. Just return that image rather
* re-loading the image.
*/
return resourceCache[url];
} else {
/* This URL has not been previously loaded and is not present
* within our cache; we'll need to load this image.
*/
var img = new Image();
img.onload = function() {
/* Once our image has properly loaded, add it to our cache
* so that we can simply return this image if the developer
* attempts to load this file in the future.
*/
resourceCache[url] = img;
/* Once the image is actually loaded and properly cached,
* call all of the onReady() callbacks we have defined.
*/
if(isReady()) {
readyCallbacks.forEach(function(func) { func(); });
}
};
/* Set the initial cache value to false, this will change when
* the image's onload event handler is called. Finally, point
* the image's src attribute to the passed in URL.
*/
resourceCache[url] = false;
img.src = url;
}
}
为什么 load()
是 "publicly accessible" 而 _load()
是 "private"? public/private 在这种情况下是什么意思?
如果您需要,完整文件位于 https://github.com/YolkFolkDizzy/frontend-nanodegree-arcade-game/blob/master/js/resources.js
它是私有的,因为它不能被直接调用...见第 105 行:
window.Resources = {
load: load,
get: get,
onReady: onReady,
isReady: isReady
};
由于该方法是在范围内声明的,因此在其他任何地方都将不可用。
可以看到代码写在里面:
(function() {
...
})()
它强制将任何函数声明或变量声明附加到当前作用域。没有这个,变量通常会附加到最近的当前对象 window。因此 _load
永远不会导出,调用它的唯一方法是调用 Resource
对象中 window
上导出的方法之一。
- Public 是什么时候可以从外面调用。
- 私有是指某些东西只能从内部调用。
在 Javascript 中,私有属性通常隐藏在一个范围内,仅对在该范围内创建的函数可用。