2017-02-08 9 views
1

Am в положении переопределения функции js, которая находится внутри другой функции.Как я могу переопределить функцию JS внутри другой функции?

Например:

function parentMethod(){ 
    function someOtherMethod(){ 
     alert("Am someone") 
    } 
    function childMethod(){ 
     alert("Am Child") 
    } 
    childMethod() 
} 

childMethod = function(){ 
     alert("Am Child New") 
    } 

На самом деле я хочу, чтобы переопределить функцию суб неработающей коробки scirpt расслоение плотной предоставленной sharepopint.If я переопределять parentMethod он работает правильно, но он будет производить 1300 линии дублирования кода, поскольку мы фактически переопределяем одну из многих доступных функций.

Как я могу достичь этого без дублирования кода. Любая помощь будет принята с благодарностью.

Заранее спасибо.

ответ

2

Указанный вами дочерний метод недоступен вне области действия родительского объекта, если родительская функция не определена правильно, то есть метод childMethod, к которому вы пытаетесь получить доступ, не связан с родителем. например

var parentMethod = function(){ 
    this.someOtherMethod = function(){ 
     alert("Am someone") 
    } 
    this.childMethod = function(){ 
     alert("Am Child") 
    } 
} 

Там нет правильного пути достижения этой цели с текущим состоянием родительского класса, однако я сделал рабочую скрипку для рабочего примера. https://jsfiddle.net/eaqnnvkz/

var parentMethod = { 
    someOtherMethod: function() { 
    alert("Am someone") 
    }, 

    childMethod: function() { 
    alert("Am Child") 
    } 
}; 

parentMethod.childMethod(); 
parentMethod.childMethod = function() { 
    alert("Am Child New") 
}; 

parentMethod.childMethod(); 
+0

Спасибо за ответ :). Проблема в том, что на самом деле родительский метод не написан мной. Это общий доступ к файлу сценария Sharepoint, на который ссылается. Поэтому я не могу изменить родительский метод. – Unknown

0

К сожалению, если сценарий не написан для присоединения подфункции к доступной области, он не может быть переопределен выборочно. Функция внутри функции по умолчанию не доступна индивидуально.

Довольно хак способом это может быть попыткой будет получить источник parentMethod() через parentMethod.toString(), а затем использовать регулярное выражение для замены метода ребенка, а затем заменить оригинальную версию функции с измененным версия используя eval(). Это, скорее всего, не долгосрочное решение, и я бы лично его отговорил, но теоретически выполнил бы требуемый эффект.

 Смежные вопросы

  • Нет связанных вопросов^_^