2017-05-16 19 views
0

파일에 Window 개체에 속성을 첨부하고 싶습니다. 이것은 현재 내가 인생에서이 모든 일을 마무리하고이 라이브러리 될 것입니다합니다 (Window 객체의 속성으로 binary 인스턴스를 배치 할IIFE에서 생성자 함수를 랩핑하고 Window 객체에서 인스턴스를 배치하는 방법은 무엇입니까?

function Binary() { 
    var obj = function(msg){ console.log(msg + this.binaryString) }; 
    obj.binaryString = '' 

    Object.defineProperty(obj, 'zero', { 
     get: function() { 
      obj.binaryString += '0'; 
      return obj; 
     } 
    }); 

    .... 

    return obj; 
}; 

var binary = new Binary(); 

이 내가 변수 이름을 원하지 않는 I 코드입니다 갈등). 나는 여러 다른 시간을 시도하고 대답을 얻을 max callstack error 어떻게 이것을 올바르게합니까?

(function(){ /*Put code here.*/; window.binary = result; })() 

또는 return이 방법 : 기본적으로

+0

당신이 시도 것을 우리에게 보여 수를, 난 그냥 포장 한 그것은 IIFE에서'var binary = new Binary();'를'window.binary = new Binary(); '로 바꿨고 모든 것이 잘 동작합니다. – George

답변

1

당신이 이런 식으로 할

'use strict'; 
 
window.binary = (function() { 
 

 
    var obj = function(msg){ console.log(msg + this.binaryString) }; 
 
    obj.binaryString = '' 
 
    
 
    Object.defineProperty(obj, 'zero', { 
 
    get: function() { 
 
     obj.binaryString += '0'; 
 
     return obj; 
 
    } 
 
    }); 
 
    // ... 
 
    return obj; 
 

 
})(); 
 
console.log('1', window.binary); 
 
console.log('2', binary); 
 

 
/* 
 
In modern JavaScript you may use `{...Code here...}` + `let`/`const` 
 
as a scope, but it doesn't work for `var`s! 
 
*/ 
 
'use strict'; // Don't forget strict mode! 
 
{ 
 
    const foo = 42; 
 
    let choo = 'Choo choo!'; 
 
    var goo = 55; // Leaks! 
 

 
    function poo() { console.log('POO!'); } 
 

 
    window.bar = 'baz'; 
 
} 
 
console.log('foo', window.foo); // undefined 
 
console.log('choo', window.choo); // undefined 
 
console.log('goo', window.goo); // DEFINED! 
 
console.log('poo', window.poo); // undefined 
 
console.log('bar', window.bar); // DEFINED!

+0

이 예제에서 IIFE는 모든 것이 Binary() 함수 안에 들어 있기 때문에 아무 것도하지 않습니다. –

+0

이 방법으로 전역 네임 스페이스를 오염시키지 않습니까? – ilyaigpetrov

+0

@ilyaigpetrov 이제'Window.binary.zero()'를 호출하면 작동하지만 'binary.zero()'를 호출하면 바이너리가 정의되지 않습니다. 'binary'가'Window' obj에 놓일 때 어떻게 간단하게'binary.zero()'를 호출 할 수 있습니까? 나는 기본적으로 jQuery처럼 작동하도록하고있다. – georgej