В jQuery, как правильно использовать «это» в этой ситуации? - PullRequest
1 голос
/ 07 июля 2010

Я не понимаю, почему этот код написан так, но я уверен, что важно понять:

$.fn.mapImage = function(options){
    //Set user input options and defaults
    var optionConfig = $.extend({}, $.fn.mapImage.defaults, options);

    image=this;
    this.image = this;

    // Assign defaults
    this.getUrl = optionConfig.getUrl;
    this.saveUrl = optionConfig.saveUrl;
    this.deleteUrl = optionConfig.deleteUrl;
    this.editable = optionConfig.editable;
    this.pinpoints = optionConfig.pinpoints;
    image.pinpoints = optionConfig.pinpoints;
    image.pinpointCount = 0;


    this.canvas = $('<div class="canvas"><div class="create-mode"></div><div class="edit-mode"></div></div>');
    this.image.after(this.canvas);
    this.canvas.height(this.height());
    this.canvas.width(this.width());
    this.canvas.css('background-image', 'url("' + this.attr('src') + '")');
    this.canvas.children('.create-mode').css('cursor', 'crosshair');
    this.canvas.children('.create-mode, .edit-mode').height(this.height());
    this.canvas.children('.create-mode, .edit-mode').width(this.width());
    this.canvas.children('.edit-mode').show();
    this.canvas.children('.create-mode').hide();
    $(this).hide();


}

Что я не понимаю, так это то, почему код имеет image=this и this.image=this это то же самое?почему бы не сделать что-то вроде image.after(this.canvas) означает ли это this текущий объект, который в первую очередь передается через функцию?

Ответы [ 2 ]

1 голос
/ 24 ноября 2010

Причина, по которой это сбивает с толку (не каламбур), заключается в том, что вам не хватает кода для приведенного выше примера, чтобы иметь смысл:

var image; // necessary otherwise you'll get a runtime exception.

$.fn.mapImage = function(options){
    //Set user input options and defaults
    var optionConfig = $.extend({}, $.fn.mapImage.defaults, options);

    image=this;
    this.image = this
    ...

Теперь, когда вы посмотрите на:

image=this;
this.image = this

Это имеет больше смысла, не так ли? Первое назначение для локальной переменной 'var image'. Таким образом, ссылка сохраняется даже после завершения выполнения функции.

Второе присваивание для свойства текущего объекта, обозначенного 'this'.

Вот ваше объяснение, но для меня нет смысла использовать в коде и 1013, и 1014. Хорошо бы использовать image.

0 голосов
/ 07 июля 2010

Я не понимаю, почему в коде есть image=this и this.image=this, это одно и то же?

нет, они не ...

image = this;
this.image = this;

в том смысле, что мы можем сказать, что image и this.image относятся к одной и той же вещи this, верно?

image = this;
// ^      ^----- current object
// | --- this image is a variable
this.image = this;
//     ^--- this image is a property of current object, this 
// because of image = this;, we can also say that
image.image = this;
// ^    ^      ^----- current object
// |    |------------ property
// |----------------- variable

Вы также можете получить некоторую идею здесь

...