Мне нужно добиться функциональности, аналогичной функциям JavaScript call () или apply () в Coldfusion 8. Мне нужен способ динамического связывания моего контекста this для вызываемой функции.Кроме ручной передачи контекста в списке аргументов, есть ли другой способ сделать это?К сожалению, мне трудно найти подсказки в Google, потому что я не могу найти ключевое слово "this".
<!--- component A --->
<cfcomponent>
<cffunction name="init">
<cfset this.value = "My name is A">
<cfreturn this>
</cffunction>
<cffunction name="setDelegate">
<cfargument name="delegate">
<cfset this.delegate = delegate>
</cffunction>
<cffunction name="runDelegate">
<cfoutput>#this.delegate()#</cfoutput>
</cffunction>
</cfcomponent>
<!--- component B --->
<cfcomponent>
<cffunction name="init">
<cfset this.value = "Hello, I am B">
<cfreturn this>
</cffunction>
<cffunction name="call">
<cfoutput>#this.value#</cfoutput>
</cffunction>
</cfcomponent>
<!--- main cfm --->
<cfset mrA = createObject('component', 'A').init()>
<cfset mrB = createObject('component', 'B').init()>
<cfset mrA.setDelegate(mrB.call)>
<!--- I want to return "Hello, I am B", --->
<!--- but it's going to output "My name is A" in this case --->
<cfoutput>#mrA.runDelegate()#</cfoutput>
В приведенном выше примере контекст "this" принадлежит A, но я хочу связать контекст с B, чтобы использовать свойства B.
Это легко сделать в JavaScript, просто передав mrB в функцию call (): mrA.runDelegate.call (mrB);который установит контекст «this» в mrB вместо mrA.