RequireJS를 사용하여 간단한 싱글 톤을 만들고 싶습니다.
이 같은:
// js/modules/singleton.js
define([], function () {
var Singleton = function() {
this.value = 10;
}
return new Singleton();
});
내 주요 항목에는 다음 코드가 있습니다.
// main.js
require.config({
paths: {
singleton: 'js/modules/singleton'
},
shim: {
}
});
var o1 = require(["singleton"]);
var o2 = require(["singleton"]);
console.log(o1 === o2); // true
console.log(o1.value); // undefined (?!)
console.log(o2.value); // undefined (?!)
o1.value = 20;
console.log(o1.value); // 20
console.log(o2.value); // 20
o2.value = 30;
console.log(o1.value); // 30
console.log(o2.value); // 30
변수 o1 및 o2가 동일한 싱글 톤 인스턴스 (o1 === o2)를 올바르게 가리키고 있었지만, o1.value 및 o2.value가 정의되지 않은 이유는 무엇 입니까 ??
이렇게 초기화 되었기 때문에 "value"속성은 이와 같이 = 10이 될 것으로 예상합니다.
귀하의 문제는 거의 경쟁 조건입니다.
다음과 같은 간단한 (동기!) 호출
var o1 = require(["singleton"]);
의 비동기 버전을 사용하여 이전에로드 된 경우에만 모듈을 반환합니다 require()
.
따라서 문제를 해결하려면 다음 require()
과 같이 비동기 호출로 코드를 래핑 하면됩니다.
require( ['singleton'], function( singleton ){
o1 = singleton;
o2 = singleton;
console.log(o1 === o2); // true
console.log(o1.value); // 10
console.log(o2.value); // 10
o1.value = 20;
console.log(o1.value); // 20
console.log(o2.value); // 20
o2.value = 30;
console.log(o1.value); // 30
console.log(o2.value); // 30
});
RequireJS 문서 인용 (강조 표시 추가) :
콘솔 디버깅 :
require(["module/name"], function(){})
JavaScript 콘솔에서 호출을 통해 이미로드 한 모듈로 작업해야하는 경우 모듈 의 문자열 이름을 사용하여 가져 오는 require () 양식을 사용할 수 있습니다.
require("module/name").callSomeFunction()
"모듈 / 이름은"이전 요구의 비동기 버전을 통해로드 한 경우이 경우에만 작동합니다 :
require(["module/name"])
. './module/name'과 같은 상대 경로를 사용하는 경우 이들은 define 내부에서만 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다