2016-07-12 3 views
0

한 개체에서 다른 개체로 기능을 복사하고 있습니다.함수를 익명화하고 개체에서 이름을 제거하는 방법?

var o1 = { 
 
    a: function() { 
 
    alert("Hello World"); 
 
    }, 
 
    b: 123, 
 
    c: "Some string" 
 
} 
 

 
var o2 = {}; 
 

 
for (var key in o1) { 
 
    if ("function" == typeof o1[key]) { 
 
    o2[key] = o1[key]; 
 
    } 
 
} 
 

 
console.log(o2.a); //output: function o1.a()

이 두 기능은 어떤 방법으로 연결하지 않는 것,하지만이 : 문제는 그들이 소스 객체에 익명 동안, 그들은 대상 객체에 이름을 가지고있다 적어도 자극적입니다. 또한 Firefox Developer Edition은 콘솔에 로그인하고 이름을 클릭하면 기능의 출처를 알 수 있습니다. 그리고 나는 이것이 어떻게 든 다른 나쁜 영향을 미칠지 모른다.

그래서 함수를 복사하여 익명으로 유지할 수 있다면 좋습니다!

+0

. 예를 들어, 위의 코드는'foo' 함수 안에 싸여 있습니다. 콘솔 출력은'function foo/o1.a()'입니다. – jaySon

+1

Chrome 및 Firefox에서 방금 테스트했습니다. 두 버전 모두 다른 객체에 넣을 때 함수에 이름을 추가하지 않습니다. 그리고 소스 함수가 ​​복사되지 않았기 때문에 소스 함수가 ​​어디에 있는지 항상 알 수 있습니다. 참조를 만드는 것입니다. 어쨌든, 왜 익명으로 유지하려고합니까? –

+0

참조로 복사 ... – epascarello

답변

1

Object.assign()을 사용할 수 있습니다.

var o1 = { 
    a: function() { 
    alert("Hello World"); 
    }, 
    b: 123, 
    c: "Some string" 
} 

var o2 = Object.assign({}, o1); 

독립 개체를 조작하는 경우.

봐이 너무 :이 함수의 내부에서 더 나아가 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

+0

당신은 정말로 복사하지 않고 있습니다, 당신은 단지 참조를 복사하고 있습니다. 이렇게하면,'o1.a === o2.a'. 아마도 Function.bind (o2)를 사용해야 할 것입니다. –

+0

글쎄, 이것은 for-in-loop의 대안으로 객체를 "복사"하는 적절한 방법이지만 결과는 같습니다. – jaySon

관련 문제