Ответы, вероятно, работают, но почему не используется прототип? Будет ли функция align выполнять разную логику для каждого экземпляра?
Как указал Берги; JavaScript использует прототип для наследования, и лучше определить члены прототипа, которые не меняются между экземплярами:
Просто объяснил; прототип может использоваться для объявления членов/свойств, которые не будут меняться для экземпляра. Если я объявляю объект с именем Person, а у человека есть 2 члена: имя и приветствие. Приветствие выводит «Привет, я [это.имя]», поэтому приветствие не меняется между экземплярами.
Когда я объявлю метод приветствия в прототипе Person, а затем создам тысячи экземпляров Person (бен, джек, мэри ....), все они будут использовать только одну функцию greet
. Это экономит память и процессорное время для инициализации объекта. Перейдите по этой ссылке для получения дополнительной информации: https://stackoverflow.com/a/16063711/1641941
Следующая ссылка может помочь вам понять, что означает this
в JavaScript. https://stackoverflow.com/a/19068438/1641941
function Svg() {
this.someInstanceValue=22;
}
Svg.prototype.align = function(value) {
if(value === 'left') return 0;
}
function Graph() {
// get Svg's instance properties
Svg.apply(this,arguments);
console.log('<text x="' + this.align('left') + '"></text>');
}
//inherit from Svg:
Graph.prototype=Object.create(Svg.prototype);
Graph.prototype.constructor=Graph;
graph = new Graph();
graph.align('left');
Если вы не хотите наследовать от Svg, но смешиваете его, вы все равно можете использовать прототип для смешивания его функций (и вызывать Svg.apply для получения необходимых членов экземпляра):
function mixin(source, target){
for(thing in source){
if(source.hasOwnProperty(thing)){
target[thing]=source[thing];
}
}
};
function Svg() {
this.someInstanceValue=22;
}
Svg.prototype.align = function(value) {
if(value === 'left') return 0;
}
function Graph() {
// get Svg's instance properties
Svg.apply(this,arguments);
console.log('<text x="' + this.align('left') + '"></text>');
}
//mix in Svg:
mixin(Svg.prototype, Graph.prototype)
graph = new Graph();
graph.align('left');
person
HMR
schedule
07.10.2013
align
является глобальной переменной? Вы хотели, чтобы это стало собственностью? - person Bergi   schedule 07.10.2013this.align
, что, по-моему, правильно? - person John Smith   schedule 07.10.2013Graph.prototype
внутри конструктораGraph
!!! - person Bergi   schedule 07.10.2013