2010-04-26 6 views
0

이제 window.onload에 함수 자체가 아니라 함수 결과가 할당 되었기 때문에 다음 코드가 작동하지 않는다는 것을 이해했습니다. 그러나 parens를 제거하면, 나는 명시 적으로 onload 전에 config를 처리하기 위해 별도의 함수를 호출해야한다고 생각합니다. 그래서, 지금이 여기서 사람들이 스크립트를 사용하여 구성을 전달하는window.onload 내에서 기본값 전달 중입니까?

var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    configs: function(config){ 
      for(prop in config){ 
       setBgcolor.defaults[prop] = config[prop]; 
      } 
    }, 
    init: function() { 
     var bod = document.body; 
     bod.style.backgroundColor = setBgcolor.defaults.color; 
    } 
} 
var config = { 
    color: "green" 
} 

lbp.configs(config); 
window.onload = lbp.init; 

그런 다음, 그들이 전화를해야합니다 : 나는 그것을 변경해야 할 것입니다 상상

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<HEAD> 
<script type="text/javascript" src="lb-core.js"></script> 
<script type="application/javascript"> 
var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    init: function(config) { 
     if(config) { 
      for(prop in config){ 
       setBgcolor.defaults[prop] = config[prop]; 
      } 
     } 
     var bod = document.body; 
     bod.style.backgroundColor = setBgcolor.defaults.color; 
    } 
} 
var config = { 
    color: "green" 
} 
window.onload = lbp.init(config); 
</script> 
</HEAD> 
<body> 
<div id="container">test</div> 
</body> 
</HTML> 

두 가지 하단 라인을 별도로 (configs 및 init). 이 작업을 수행하는 더 좋은 방법이 있습니까?

참고 : 답변이 window.onload의 기능을 묶는 것이라면 스크립트 내에서 window.onload를 지정하는 것이 위험하지 않은지 확인하십시오. 실제로 내 스크립트를 덮어 쓸 수있는 다른 스크립트가 실제로로드 할 수 있다고 생각합니다. 이를 고려하여 스크립트 사용자가 초기화시 함수를 직접 호출 할 것을 기대하는 것이 가장 좋습니다.

답변

2

이 같은 옵션을 전달하는 익명 함수를 사용하여

window.onload = function() { lbp.init(config); }; 

당신은 눈에 거슬리지 경로 like this을 덮어지고 걱정합니다.

또는 당신은 내가 이것에 대한 jQuery를 사용하는 예를 들어, 자바 스크립트의 요구에 대한 라이브러리를 사용할 수 있으며, 그 결과는 다음과 같습니다

$(function() { lbp.init(config); }); 

에 대한 라이브러리를 얻기이 과잉이지만, 경우 당신은 많은 자바 스크립트를 가지고 있습니다, 나는 당신이 look at what's available을 가져갈 것을 제안 할 것입니다.

+0

초기화에 이것을 하드 코딩하고 괄호없이 호출하는 것이 좋지 않습니까? 예를 들어 lbpConfig를 테스트 할 수 있습니다. 존재한다면 그 설정을 적용 할 수 있습니까? 이 스크립트는 동일한 페이지에서 여러 번 초기화되지 않습니다 ... – Matrym

+0

도서관 : jQuery를 좋아하지만 오래된 학교 자바 스크립트를 배우려고합니다. 나는 의존성없이 이걸 만들려고한다. 그래서 사람들은 그것을 사용할 때 자신의 라이브러리를 선택할 수있다. – Matrym

+0

@Matryn - 내가 추측 한 후에 당신이 할 수있는 일은'.init (config || {})'할 수 있고, 존재한다면 config를 넘겨 줄 것이다. –

0

init를 호출 한 결과 익명의 함수를 반환 할 수 있습니다. 다음과 같은 것 :

var lbp = { 
    defaults: { 
     color: "blue" 
    }, 
    init: function(config) { 
     for(prop in config){ 
      setBgcolor.defaults[prop] = config[prop]; 
     } 
     return function() { 
      var bod = document.body; 
      bod.style.backgroundColor = setBgcolor.defaults.color; 
     }; 
    } 
} 
window.onload = lbp.init({color: "green"});