установка свойств с помощью этого ключевого слова в функции - PullRequest
2 голосов
/ 31 марта 2020

Я практикую makerjs с javascript. Во время использования у меня возникла проблема с ключевым словом this.

//render a model created by a function, using the 'this' keyword

var makerjs = require('makerjs');

function myModel() {

 var line = { 
   type: 'line', 
   origin: [0, 0], 
   end: [50, 50] 
  };

 var circle = { 
   type: 'circle', 
   origin: [0, 0],
   radius: 50
  };

 var pathObject = { myLine: line, myCircle: circle };

//set properties using the "this" keyword ***here I dont' understand
 this.paths = pathObject;
}

//note we are using the "new" operator
var svg = makerjs.exporter.toSVG(new myModel());

document.write(svg);

. Я не понимаю, как работает этот код. После сохранения с этим ключевым словом, например ниже,

 this.paths = pathObject;

Как это работает, ничего не возвращая?

1 Ответ

1 голос
/ 31 марта 2020

Ваша myModel функция не обязательно должна что-либо возвращать, она также может предоставлять свойства через this. makerjs.exporter.toSVG ищет paths свойство в new myModel() экземпляре, которое вы указали в строке ниже.

this.paths = pathObject;

В приведенной выше строке вы создаете свойство paths для текущего экземпляра, где текущий экземпляр доступен через this. Как вы можете видеть из фрагмента ниже, я могу получить доступ к paths, используя m.paths.

Вы можете узнать больше о том, как this ведет себя, когда функция вызывается как конструктор здесь (ищите «Как конструктор»)

function myModel() {

 var line = { 
   type: 'line', 
   origin: [0, 0], 
   end: [50, 50] 
  };

 var circle = { 
   type: 'circle', 
   origin: [0, 0],
   radius: 50
  };

 var pathObject = { myLine: line, myCircle: circle };

//set properties using the "this" keyword ***here I dont' understand
 this.paths = pathObject;
}

let m = new myModel();

console.log(m.paths)
...