내가 아래 생성자 함수에 injectMethod 호출의 수를 줄일 수있는 방법에 관심이 객체 새 변수를 선언 할 필요없이 원하는만큼의 URL 참조를 포함하는 생성자 함수에 객체를 추가 한 다음 메서드를 호출 할 수 있습니까?는
Q
는
1
A
답변
2
생성자가 객체 또는 배열을받을 수 있지만 여전히 하나의 인스턴스 만 생성 중입니다.
한 가지 방법은 생성자를 수정하여 일반 함수 (new
제외)로 호출하고 URL 배열을 전달하는 것입니다. 그런 다음 배열을 반복하여 재귀 호출을 수행하지만 은이고 new
키워드는 각 URL을 새 인스턴스로 덮어 씁니다.
그러면 원래 배열을 반환합니다.
function InjectScriptsAndExecute(url) {
if (Object.prototype.toString.call(url).indexOf('Array') != -1) {
for (var i = 0, len = url.length; i < len; i++) {
url[i] = new InjectScriptsAndExecute(url[i]);
}
return url;
} else {
this.url = url;
this.injectMethod = function() {
var inject = $.ajax({
url: this.url,
cache: true,
dataType: 'script'
});
return inject;
}
}
}
var arr = InjectScriptsAndExecute(["/Global/ICIS/Scripts/DD_belatedPNG_0.0.8a-min.js",
"/Global/ICIS/Scripts/DD_PNG_listing.js"
]);
var len = arr.length;
while(len--) {
arr[len].injectMethod();
}
안전을 위해 함수가 생성자로 호출되는지 여부를 확인하기 위해 추가 검사가 실제로 필요합니다. 그리고 배열이나 문자열을 받았는지에 따라 각각에 대해 적절한 동작을 원합니다.
1
당신 은 수 -하지만 당신은 여기에 흥미로운 영역으로받을거야 :
function InjectScriptsAndExecute() {
this.urls = Array.prototype.slice.call(arguments, 0);
this.injectMethod = function() {
for (var i=0; i < this.urls.length; i++) {
$.ajax({
url: this.urls[i],
cache: true,
async: false, // Otherwise you cannot depend on the parse order
dataType: 'script'
});
}
}
// You can then use it in this way:
var all_scripts =
new InjectScriptsAndExecute("/Global/ICIS/Scripts/DD_belatedPNG_0.0.8a-min.js",
"/Global/ICIS/Scripts/DD_PNG_listing.js");
all_scripts.injectMethod();
당신이 아마 원하는 것은 Require.js 또는 LAB.js 당신이 어떤 주파수에이 일을하는 경우 같은 종속성 관리자가 . Dojo 및 YUI은 전체 프레임 워크를 찾는 경우 종속성 관리도 제공합니다.
관련 문제
'this.injectMethod = function() {...'을 쓰는 대신,'InjectScriptsAndExecute()'의'prototype'에 그것을 추가함으로써 실제로 그 함수를 재사용해야합니다. 각 인스턴스에 대해 새 함수를 작성할 필요가 없습니다. 그래서 생성자 다음에 인스턴스를 생성하기 전에'InjectScriptsAndExecute.prototype.injectMethod = function() {...'을 실행 한 다음 생성자에서 해당 메소드를 제거하십시오. – user113716
@ Patrick DW - 왜 그런가요? – RyanP13
@ RyanP13 :보다 효율적입니다. 만약 당신이 new를 100 번 써서 생성자를 호출한다고 해보자. 각 인스턴스에 대해 별도의 (아직 동일한) 함수를 만들었습니다. 프로토 타입에 함수를 추가하면 인스턴스를 1 개 또는 1,000 개 만들 때 모두 공유하는 하나의 함수 만 존재하게됩니다. – user113716