function test(){
var customFormula={};//局部函数
var data={a:"aaa",b:"bbb",c:"ccc"}
function $(n){
return data[n];
}
this.CustomFormulaNameAdd=function(name,FN){
var fn="customFormula['"+name+"']="+FN;
eval(fn);
return name;
};
this.getData=function(fn){
alert(customFormula[fn]());
};
}
var T=new test();
T.CustomFormulaNameAdd('aaa','function(){return $("a")+$("b");}');
T.getData("aaa");
解决方案 »
- Ext:费解 为什么这里不显示关闭按钮呢
- 精简文件 extjs 4
- 一段简单的js代码,高手来看看
- 求助 .NET 拼凑 JS 语句 加\N\R 不自动换行 有高手知道解决方法么 40分 回答完马上节贴
- 正则求解,在线等!
- 100分求助js混淆器。
- 问一个贼简单的设计问题。。。。。。。。。。。。。。。。。。。。。
- showModalDialog打开的对话框不支持document.all.WebBrowser.ExecWB(7,1)???
- 如何将 一个表单 提交到两个 地址? 请高手 明示
- 怎么在网页中加入类似windows资源管理器的导航栏?......
- js如何访问和控制iframe中包含的iframe中的对象
- js post数据问题
值是不变的
根据自定义的方法取出data里面的值
就是在js里实现公式
function test(){
var data={a:"aaa",b:"bbb",c:"ccc"};
this.$ = function(n){
return typeof n=='string'?data[n]:data;
}
}
test.prototype.aaa = function(){
var data = this.$();
return data.a+data.b;
}
var T = new test();
alert(T.aaa());
我取值的方法是动态的
data是从后台取出来的
T.CustomFormulaNameAdd('aaa','function(){return $("a")+$("b");}');
T.CustomFormulaNameAdd('ccc','function(){return $("a")+$("c");}');
var fielid=["aaa","ccc"];
我可以有N种取之方式同时存在;
怎么取我是事先是不知道的客户想怎么取让他自己去定义
for(var i=0;i<fielid.length;i++){
T.getData("aaa");
}
你没看到我写的也是可以动态添加方法的?
加一句
test.prototype.ccc= function(){
var data = this.$();
return data.a-data.b;
}
不就有ccc方法了?
你调用时 T['ccc']();不就行了,一样可以用字符串,有什么区别?
甚至包装一下做成你那个样子也可以
test.prototype.CustomFormulaNameAdd = function(name,fun){
this[name] = fun;
}
test.prototype.getData = function(name){
var data = this.$();
return this[name].call(this,data);
}然后调用时
var T = new test();
T.CustomFormulaNameAdd('ccc',function(data){
return data.a;
});
T.getData('ccc');
test.prototype.CustomFormulaNameAdd=function(){}
和this.CustomFormulaNameAdd();
有什么区别?
test.prototype.CustomFormulaNameAdd=function(){}
和this.CustomFormulaNameAdd=function(){};
有什么区别?
2使用了eval要改进
里面的函数?
假设有一个Test父类,它有一个getData的方法需要子类去实现
子类实现的getData方法内容可以不一样,这样也就等同于添加了一个不同的方法了这种方法看上去也简单明了,可扩展性强.
<script type="text/javascript">
// 父类
function Test() {
this.data = {a:"aaa",b:"bbb",c:"ccc"}; // 假设父类有getData方法,必须要子类实现
if(typeof this.getData !== 'function') {
throw new Error('没有getData方法')
}
}// == 子类1 ==
function TestChild() {
// 继承Test父类
Test.call(this);
}// 实现父类的getData方法
TestChild.prototype.getData = function() {
alert(this.data.a + this.data.b);
}// == 子类2 ==
function TestChild2() {
// 继承Test父类
Test.call(this);
}// 实现父类的getData方法
TestChild2.prototype.getData = function() {
alert(this.data.b + this.data.c);
}
var testChild1 = new TestChild();
var testChild2 = new TestChild2();testChild1.getData(); // aaabbb
testChild2.getData(); // bbbccc
</script>
<script type="text/javascript">
function Test() {
this.data = {a:"aaa",b:"bbb",c:"ccc"};
// 用键值对的形式保存方法
this.funcMap = {};
}Test.prototype.getData = function(funcName) {
this.funcMap[funcName].call(this);
}
// 添加方法
Test.prototype.addFunc = function(funcName,func) {
this.funcMap[funcName] = func;
}
var test = new Test();test.addFunc('aaa',function(){
alert(this.data.a + this.data.b);
});
test.addFunc('bbb',function(){
alert(this.data.b + this.data.c);
});
test.getData('aaa');
test.getData('bbb');
</script>
你用了闭包 所以只能用你这样的写法 不能用后面说的 prototype定义方式T.CustomFormulaNameAdd('aaa','function(){return $("a")+$("b");}');先把需求弄清楚和解决 不要学其他几楼玩什么继承 原型 之类的
请问哪一种更消耗类存?
我是要做数据展示,
我将逻辑全部放到了前台
数据量会比较大