gpt4 book ai didi

oop - 对 ColdFusion 中的类、实例和方法感到困惑

转载 作者:行者123 更新时间:2023-12-04 19:36:12 25 4
gpt4 key购买 nike

我的问题可能最好用一个例子来说明。在 javascript 中,我习惯于能够做这样的事情:

// create a simple class
function myClass() {
this.attr_example = "attribute";
}
myClass.prototype.do_something = function() {
return "did something";
}

// create an instance of it, and modify as needed
var thing = new myClass();
thing.myMethod = function(arg) {
return "myMethod stuff";
}

// ... so that this works as expected
console.log(thing.myMethod());
console.log(thing.do_something());
console.log(thing.attr_example);

当谈到在 ColdFusion 中做类似的事情时,我被卡住了。我经常发现自己想做这样的事情:

<cfscript>
// thing.cfc contains a normal cfcomponent definition with some methods
var thing = createObject("component","Thing");
function formattedcost() {
return "#LSCurrencyFormat(this.cost)#";
}
thing.formattedcost = formattedcost;
</cfscript>
<cfoutput>
#thing.formattedcost()#
</cfoutput>

假设对于这个问题,将“formattedcost”添加为 Thing 类的方法没有意义,因为它纯粹是表象。我们还假设简单地使用 #LSCurrencyFormat(thing.cost)#<cfoutput>标签也不够,因为我们需要 Thing 的实例由模板系统评估(在本例中为 mustache )。更进一步,我想避免创建另一个 .cfc 文件来扩展我的 Thing类添加几个方法。

我能做什么?这种编程风格在 ColdFusion 中可行吗?

最佳答案

是的,你可以这样做:

事物.cfc

<cfcomponent output="false" accessors="true">
<cfproperty name="cost" type="numeric">
<cffunction name="init" output="false" access="public"
returntype="any" hint="Constructor">
<cfargument name="cost" type="numeric" required="true"/>
<cfset variables.instance = structNew()/>
<cfset setCost(arguments.cost)>
<cfreturn this/>
</cffunction>
</cfcomponent>

测试.cfm

<cfscript>
// thing.cfc contains a normal cfcomponent definition with some methods
thing = new Thing(725);
function formattedcost() {
return "#LSCurrencyFormat(getCost())#";
}
thing.formattedcost = formattedcost;
</cfscript>
<cfoutput>
#thing.formattedcost()#
</cfoutput>

结果

$725.00

关于oop - 对 ColdFusion 中的类、实例和方法感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5721568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com