2014-02-18 5 views
1

노드에 응용 프로그램을 작성 중이며 이상한 점이 있습니다.this.property가 nodejs에서 undefined를 반환합니다.

call() 메서드를 사용하여 함수에 객체를 전달하여 해당 객체를 수정합니다. 함수 내부에서 console.log (this)를 수행하면 객체를 올바르게 반환하지만 console.log (this.foo)를 수행하려고하거나 객체를 수정하려고하면 정의되지 않는다고 말합니다. 업데이트 : 다른 함수에 함수를 주입해야하기 때문에이 함수를 객체에 전달해야합니다. (더 구체적으로, 나는 어쩌면이 또한 문제의 일부입니다. 일을 this를 얻기 위해 노력하고있어.

var obj = {name: "John", age: 23}; 
var functions = {up: function() { /* do stuff */ }, down: function() { /* do stuff */ 
functions.up.call(obj); 

up: function() { 
    console.log(this); //returns {name: "John", age: 23} 
    console.log(this.name); //returns undefined 
    this.wife = "Jenny"; //doesn't do anything 
} 

내가 '_'그들이 존재와 속성을 설정하지만, 경우에 표시되지 않습니다하지만 경우 내가 (이) CONSOLE.LOG 전화;.

up: function() { 
    this._wife = "Jenny"; //doesn't do anything 
    console.log(this._wife); //returns "Jenny" 
    console.log(this); //still returns {name: "John", age: 23} 
} 

내가 this.set (키, 값)를 사용하여 같은 모든 노력을했습니다 썩 (키), this.attributes [ "이름"] 값, ..

어쩌면 내가 '이'작품을 오해하고있다. 그러나 수 시간 동안 검색하고 시도한 후에 나는 단서가 없다.

답변

2

콘솔에서 코드를 테스트 할 때 함수 표현식에 대한 구문을 수정했는데 나에게 도움이되었습니다. 아마도 이것이 문제였습니까?

var obj = {name: "John", age: 23}; 
up.call(obj); 

function up() { 
    console.log(this); //returns {name: "John", age: 23} 
    console.log(this.name); //returns "John" 
    this.wife = "Jenny"; // works 
    console.log(this); 
} 
+0

감사합니다, 그러나 나는 그것을 할 수 없다. 왜냐하면 나는 아마도 객체를 통해 함수를 전달해야하기 때문이다. 내 질문을 업데이트했습니다. –

0

내가 노드, 크롬/WIN7 & 메모장이에서 출력 작업 받고 있어요 ++ 플러그인 :

var obj = { name: "John", age: 23 }; 
var functions = { 
    up: function() { 
     console.log(this); //returns {name: "John", age: 23} 
     console.log(this.name); //returns undefined 
     this.wife = "Jenny"; }, //doesn't do anything 
    down: function(){ } } 
functions.up.call(obj); 
console.log('obj:',obj); 

출력 :

{이름 '존', 연령 : 23 }
John
obj : {이름 : 'John', 나이 : 23, 아내 : 'Jenny'}

의 이해는 '이'올바른
당신은 내가 같은 문제가 있었다

temp = obj.up; 
obj.up = functions.up; 
obj.up(); 
obj.up = temp;//or: delete obj.up; 
+0

node.exe 버전과 관련 될 수 있습니까? 파일 버전 : 0.10.25.0, 제품 버전 : 0.10.25 – imma

+0

동일한 Node 버전을 실행 중이므로 문제가되지 않습니다. 또한 코드만으로도 잘 작동하지만 위에서 설명한 https : // github와 npm 모듈을 함께 사용하면 코드가 잘 작동합니다.co.kr/InterNACHI/mongoose-data-migrations 같은 문제가 있기 때문에 모듈과 관련이 있어야하지만 잘못된 것은 없습니다. 아직 우둔합니다. –

0

functions.up.call(obj); 

를 교체 시도 할 것으로 보인다. 마지막으로 나는 해결책을 발견 - 나는 괄호에 문제가있는 코드를 넣어 :

var i = node.declarations.length; //Error: cannot get length of undefined 
var i = (node.declarations).length; // 11 

난 당신이 그런 일해야 할 것 같아요 : 당신의 대답 로니를

console.log((this.name).toString()); 

또는

console.log((this.name)); 
관련 문제