Как вызвать функцию пространства имен вызывающего при этом? - PullRequest
1 голос
/ 11 мая 2011

Цель: я пытаюсь сократить способ вызова функции из одного и того же пространства имен в функции, используя «this» вместо строки пространства имен. Но, очевидно, «это» не будет работать для функции, оно работает только для переменной. Я хотел бы знать, если это из-за моего неправильного использования, или вызов функции со строкой пространства имен является единственным способом.

Еще один вопрос новичка: я вызываю функцию из того же пространства имен, что и у вызывающего. Я гуглил, и кто-то сказал, позвонив: this.myfunction будет работать, но это не так. Есть идеи? спасибо.

Я звоню: singleEntry.editContent.accept (tinyMCE.get ( 'editContentTa') getContent ().);

из: index.fragment.singleEntry.editContent.load

Я пытался сделать это следующим образом: this.accept, но firebug говорит, что this.accept не является функцией ...

  index.fragment.singleEntry.editContent.load = (function(singleEntry) {
return function() {
    // prepare edit dialog
    $("#editContentDiv").dialog({
        autoOpen : false,
        height : 500,
        width : 600,
        modal : true,
        buttons : {
            "OK" : function() {
                singleEntry.editContent.accept(tinyMCE.get('editContentTa').getContent());
                $(this).dialog("close");
            },
            "CANCEL" : function() {
                $(this).dialog("close");
            }
        },
        open : function() {
            // set value to the edit area
            tinyMCE.get("editContentTa").setContent($("#veContent").html());
        }
    });

1 Ответ

1 голос
/ 11 мая 2011

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

Когда вы вызываете функцию через свойство объекта (то есть через пунктир)нотация, или [] нотация), this в вызове функции будет ссылкой на объект.Поэтому, когда вы звоните

singleEntry.editContent.accept(tinyMCE.get('editContentTa').getContent());

... в рамках этого звонка, this будет ссылаться на singleEntry.editContent.

Если вы хотите, чтобы this ссылался на что-то еще, вы можетеиспользуйте call:

singleEntry.editContent.accept.call(thisObj, tinyMCE.get('editContentTa').getContent());
//                            ^^^^^^^^^^^^^

... где thisObj - это любой объект, который вы хотите, чтобы функция видела как this во время вызова.Подробнее здесь: Мифические методы

call - это свойство всех (реальных) функций JavaScript, и оно специально предназначено для упрощения вызова функции иустановить, что this должно быть (что такое context ) во время вызова.Также есть apply, который делает то же самое, но принимает аргументы для передачи функции как массив, а не как дискретные аргументы.Например, эти два вызова идентичны:

// Using `call`
singleEntry.editContent.accept.call(thisObj, tinyMCE.get('editContentTa').getContent());

// Using `apply`
singleEntry.editContent.accept.call(thisObj, [tinyMCE.get('editContentTa').getContent()]);
//                        Note the `[]` -----^

Все это стало возможным, потому что в JavaScript this полностью определяется как функция вызывается , а не где это определено - я думаю, что вы это знаете, основываясь на вашем вопросе, но все равно стоит отметить.

...