在javascript原型中请求一个方法
ask for a method in javascript prototype
我有一个问题,我在javascript中有这个类:
//FactVal
UTIL.Classes.FactVal = function(entity, attribute, value) {
this.entity = entity;
this.attribute = attribute;
this.value = value;
}
UTIL.Classes.FactVal.prototype.setEntity = function(entity) {
this.entity = entity;
}
当我序列化json字符串到这种类型的对象时,我想问是否存在setEntity方法,我有这个json:
"FactVal": {
"entity": {
"string": "blabla"
}
}
当我读"实体"我想知道是否存在一个方法"setEntity"在FactVal类,我认为我必须这样做:'i'的值是"FactVal"和'j'的值是"实体"。
if(UTIL.Classes[i].("set" + j[0].toUpperCase() + j.substring(1,j.length)))
不工作,我该怎么做?
谢谢。
你很接近了,你想要[]
,你需要查看构造函数的prototype
属性,而不是构造函数本身:
if(UTIL.Classes[i].prototype["set" + j.charAt(0).toUpperCase() + j.substring(1,j.length)])
(我也用j.charAt(0)
代替了你的j[0]
,并不是所有的JavaScript引擎都支持这样的字符串索引。)
或更好:
if(typeof UTIL.Classes[i].prototype["set" + j.charAt(0).toUpperCase() + j.substring(1,j.length)] === "function")
这是有效的,因为您可以通过熟悉的点符号和文字来访问对象的属性:
x = obj.foo;
…或者通过带括号的字符串符号:
x = obj["foo"];
// or
s = "foo";
x = obj[s];
// or
p1 = "f";
p2 = "o";
x = obj[p1 + p2 + p2];
代替
FactVal.setEntity
你必须查看原型,就像你最初设置属性时所做的那样:
Factval.prototype.setEntity
同样,您需要使用括号符号而不是圆括号(就像您使用[i]
一样):
if( UTIL.Classes[i].prototype["set" + j[0].toUpperCase() + j.substring(1,j.length)] )
您需要使用索引器表示法:
if (typeof URIL.Classes[i]["set" + (...)] === "function")
你的问题是这样的:
使用方法将JSON字符串转换为对象
然而,那一行:
if(UTIL.Classes[i].("set" + j[0].toUpperCase() + j.substring(1,j.length)))
应替换为:
if(typeof UTIL.Classes[i]["set" + j[0].toUpperCase() + j.substr(1)] === "function")
注意:j.substr(1)等价于j.substring(1,j.length)
相关文章:
- 将一个方法转换为promise:Nodejs
- 如何在所有ng点击事件AngularJS上启动一个方法
- 创建一个方法,通过一个窗口进行迭代并获取Titanium中的所有控件
- 如何创建一个方法来验证数组的范围
- 如何将一个方法延迟到另一个方法首先完成,javascript
- 在Javascript中对类的每个实例调用一个方法
- 如何重写一个方法,并且仍然能够在重写的方法中使用基方法
- NodeJS-从同一文件中的另一个方法调用一个方法
- 有没有任何情况下,一个方法不应该是原型方法
- Jasmine间谍的函数称为一个方法
- 在带有参数列表的表单submit上调用一个方法
- 方法不在另一个方法内部调用
- 在 1 个方法中增加变量值会触发另一个方法的 for 循环,欢迎任何建议
- 如何使用javascript express node将变量从控制器中的一个方法公开.js到另一个控制器.js
- 如何在javascript中将变量的值分配给另一个方法
- 在浏览器关闭时,单击确认对话框中的“停留在页面上”,执行一个方法
- 使用一个方法在c#中启动其他方法
- 如何在Ember中转换到另一个路由时调用一个方法
- 在typescript中重载一个方法
- 我可以在setInterval函数中放入一个方法作为参数吗