2017-06-29 1 views
0

Comment puis-je étendre la portée de ce qui fonctionne? J'ai essayé d'utiliser la fonction .bind() mais je n'arrive pas à faire quoi que ce soit pour fonctionner.Comment étendre la portée de ce

var myObj = { 
    test: "Hello", 
    test2: " World", 
    run: { 
     all: function() { 
     return this.test + this.test2; 
     }, 
     part: function() { 
     return this.test2; 
     } 
    } 
} 
console.log(myObj.run.all()) 
// => "Hello World" 
console.log(myObj.run.part()) 
// => " World" 
+0

Vous devez comprendre: 'this' dans vos fonctions est l'objet courant, ce qui est ce que vous affectai' run', et non le super-objet. Dans run (et 'this' btw), il n'y a que' all() 'et' part() ', il n'y a pas' test' et 'test2'. – sjahan

Répondre

0

J'ai récemment rencontré le même problème. Je résolus en utilisant une fonction

var myObj = function(){ 
    var self = this; 
    this.test = "Hello"; 
    this.test2 = " World"; 
    this.run = { 
     all: function() { 
     return self.test + self.test2; 
     }, 
     part: function() { 
     return self.test2; 
     } 
    } 
} 
console.log(myObj.run.all()) 
// => "Hello World" 
console.log(myObj.run.part()) 
// => " World" 

J'ai aussi découvert le bind fait le travail!

var myObj = { 
    test: "Hello", 
    test2: " World", 
    run: { 
     all: function() { 
     return this.test + this.test2; 
     }, 
     part: function() { 
     return this.test2; 
     } 
    } 
}; 

console.log(myObj.run.all.bind(myObj)()); 
// => "Hello World" 
console.log(myObj.run.part.bind(myObj)()); 
// => "World" 

violon Utilisation ==>https://jsfiddle.net/sn5w7872/

0

utilisation apply

La méthode apply() appelle une fonction à une valeur donnée this, et des arguments fourni en une matrice

var myObj = { 
 
    test: "Hello", 
 
    test2: " World", 
 
    run: { 
 
     all: function() { 
 
     return this.test + this.test2; 
 
     }, 
 
     part: function() { 
 
     return this.test2; 
 
     } 
 
    } 
 
} 
 
console.log(myObj.run.all.apply(myObj,[])); 
 
// => "Hello World" 
 
console.log(myObj.run.part.apply(myObj,[]));

-1

Utilise les classes ES6 et les fonctions fléchées.

class myObj { 
    constructor() { 
     this.test = "Hello"; 
     this.test2 = " World"; 
     this.run = { 
      all:() => this.test + this.test2, 
      part:() => this.test2 
     } 
    } 
} 

var obj = new myObj(); 
console.log(obj.run.all()) 
// => "Hello World" 
console.log(obj.run.part()) 
// => " World" 

est ici le violon de travail - https://jsfiddle.net/sgsvenkatesh/vn9b1f95/

1

Les fonctions all et part sont membres de l'objet run et run n'a pas les valeurs test et test2. Ils sont des objets membres de myObj. Vous pouvez remplacer le mot-clé this par myObj.

var myObj = { 
 
    test: "Hello", 
 
    test2: " World", 
 
    run: { 
 
     all: function() { 
 
     return myObj.test + myObj.test2; 
 
     }, 
 
     part: function() { 
 
     return myObj.test2; 
 
     } 
 
    } 
 
} 
 
console.log(myObj.run.all()) 
 
console.log(myObj.run.part())