为了感谢大家多时对我的提问诲人不倦的解答,
现在终于想出了个 编历器 ,愿大家与分享,如谁能想出更好方法,谢谢提点
[color=#0000FF]-----我首先声明,IE不兼容,在firefox里OK。
[/color]。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="holdContent.test1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script src="Js/jquery-1.4.2.js" type="text/javascript"></script>
<script src="Js/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#btnTest").click(function(){
var obj = $("#txtObject").val();
var strOut = "对象" + obj + "<hr/>" + strOut;
try{
eval('for (var v in ' + obj + ') {if (' + obj + '[v] == null) {}else if (' + obj + '[v].constructor == window.Function) {strOut += "函数名:" + "<br/>"+ ' + obj + '[v] + "<br/>";}} $("#divShow").html(strOut);');
}
catch(ex)
{
$("#divShow").html("你输入的对象不存在OR 此对象没有可调的方法:<br/>"+ex);
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<font color="#a0a0a0">js 对象编历器:在下面输入JS对象,如 window,window.document,document.body,window.top等,只要对象存在就会编历出,</font>
</p>
请输入JS对象
<br />
<input id="txtObject" type="text" />
<input id="btnTest" type="button" value="取得所有方法" />
<div id="divShow">
</div>
</div>
</form>
</body>
</html>如果能此方法加以应用,定可以写出很多好东西。
现在终于想出了个 编历器 ,愿大家与分享,如谁能想出更好方法,谢谢提点
[color=#0000FF]-----我首先声明,IE不兼容,在firefox里OK。
[/color]。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="holdContent.test1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script src="Js/jquery-1.4.2.js" type="text/javascript"></script>
<script src="Js/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#btnTest").click(function(){
var obj = $("#txtObject").val();
var strOut = "对象" + obj + "<hr/>" + strOut;
try{
eval('for (var v in ' + obj + ') {if (' + obj + '[v] == null) {}else if (' + obj + '[v].constructor == window.Function) {strOut += "函数名:" + "<br/>"+ ' + obj + '[v] + "<br/>";}} $("#divShow").html(strOut);');
}
catch(ex)
{
$("#divShow").html("你输入的对象不存在OR 此对象没有可调的方法:<br/>"+ex);
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<font color="#a0a0a0">js 对象编历器:在下面输入JS对象,如 window,window.document,document.body,window.top等,只要对象存在就会编历出,</font>
</p>
请输入JS对象
<br />
<input id="txtObject" type="text" />
<input id="btnTest" type="button" value="取得所有方法" />
<div id="divShow">
</div>
</div>
</form>
</body>
</html>如果能此方法加以应用,定可以写出很多好东西。
var obj ;
eval('obj=document.getElementById("txtObject").value');
var strOut = "对象" + obj.toString() + "<hr/>" + strOut;
try{
for (var v in obj) {
if (obj[v] != null&& obj[v].constructor == window.Function) {
strOut += "函数名:" + "<br />"+ obj[v].toString() + "<br />";
}
}
document.getElementById("divShow").innerHTML=strOut;
}
我也不想这样写的,这样写实在太不好阅读了,但是我也没法子啊,如果改成你那样写的话,对象的方法就编历不出来啊。
如果你有好的方法一定要提提哦。本来是这样编历的:
var obj = window.document.body; //要编历的对象 <---在上例要变成用户输入的字符串了
var strOut = null;
for (var vin obj ) {
if (obj [v] == null) {
}
else if (obj [v].constructor == window.Function){
strOut += "函数名:" + "<br />"+ obj[v].toString() + "<br />";
}
else {
}
}
$("#txtOut").val(strOut);这要求用户在<input id="txtObject" type="text" />输入的 字符串
:比如“window” 要变成对象 window
即然我不会把字符串变成对象。
为了达成目标,我只好把相关的代码变成 字符串 ,
用eval() 方法来重新解释 字符串 并执行了。
你能理解吗?
不知我写的是不是合2数意思。
编历时 不把用户输入的当作对象,而当作String ,所以就无法编历出来。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="holdContent.test1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<script src="Js/jquery-1.4.2.js" type="text/javascript"></script>
<script src="Js/jquery-1.4.2-vsdoc.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#btnTest").click(function(){ var obj;
eval('obj=document.getElementById("txtObject").value');
var strOut = "对象" + obj.toString() + "<hr/>";
try {
for (var v in obj) {
if (obj[v] != null && obj[v].constructor == window.Function)
{
strOut += "函数名:" + "<br />" + obj[v].toString() + "<br />";
}
}
document.getElementById("divShow").innerHTML = strOut;
}
catch (ex) {
$("#divShow").html("你输入的对象不存在OR 此对象没有可调的方法:<br/>" + ex);
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<p>
<font color="#a0a0a0">js 对象编历器:在下面输入JS对象,如 window,window.document,document.body,window.top等,只要对象存在就会编历出,</font>
</p>
请输入JS对象
<br />
<input id="txtObject" type="text" />
<input id="btnTest" type="button" value="取得所有方法" />
<div id="divShow">
</div>
</div>
</form>
</body>
</html>
那大点就是:
如下例子吧,
var b1 = ("window" == window) // 可见b1==true;
var b2 = ("window" === window) // 可见b2==false;
因为用户 输入的string--->< input id="txtObject"> 的value 中,
我用var obj=document.getElementById("txtObject").value; //则obj 是string类型。
如用户输入的是'window ' var obj=document.getElementById("txtObject").value;
则相当于
var obj='window ';
而不是
var obj=window ;你明白吗?
=>
eval('obj='+document.getElementById("txtObject").value);
arr = document.getElementById("txtObject").value.split('.'),
strOut = "对象" + arr.join() + "<hr/>";
for (var i = 0, j = arr.length; i < j; i++){
obj = obj[arr[i]];
}
try {
for (var v in obj) {
try {
if (obj[v] && obj[v].constructor == window.Function) {
strOut += "函数名:" + "<br />" + obj[v].toString() + "<br />";
}
} catch(_e){
continue;
}
}
document.getElementById("divShow").innerHTML = strOut;
}
catch (ex) {
$("#divShow").html("你输入的对象不存在OR 此对象没有可调的方法:<br/>" + ex);
}
});
这种方法以dom 的根对象开始
根对象就是window
核心,如下所示。
var doc = 'document' //doc是string类型
var doc = window[doc] //此时doc是object类型liangws 非常值得称赞!!!
var obj = eval("("+document.getElementById("text").value+")");
var str = "";
for(var i in obj){
if(obj[i] instanceof Function) str += "函数名:"+i + "\r\n";
}
document.getElementById("panel").innerHTML = "<pre>"+str+"</pre>";
var obj = eval("("+document.getElementById("text").value+")");
var str = "";
for(var i in obj){
if(obj[i] instanceof Function) str += "函数名:"+i + "\r\n";
}
//
//果然利害,写法够专业。
//看来这贴学到了不少东西啊。
function a(){
alert(arguments[0]);
alert(arguments[1]);
alert(arguments[2]);}
a("123");
a("123",123);
a(true,"123",window);
要我找出我要调用的函数。
在函数体内用正则表达试来找 x = arguments[*]
然后想法子把 x 和 * 搞出来?
之后作为用户输入时参数 参考。此法几大难点啊,
其一: 我不知怎样找到一个函数体 定义的代码
其二:正则表达式那块的过滤 我不太懂。----正则 是找 参数个数与及它对应的类型了。路过高手,不要跳过,帮帮忙。
得到:
function hasChildNodes() {
[native code]
}
为什么只能看到 [native code]
而看不到他里面的代码?
arr = document.getElementById("txtObject").value.split('.'),
strOut = "对象" + arr.join() + "<hr/>";
for (var i = 0, j = arr.length; i < j; i++){
obj = obj[arr[i]];
}
try {
for (var v in obj) {
try {
if (obj[v] && obj[v].constructor == window.Function) {
strOut += "函数名:" + "<br />" + obj[v].toString() + "<br />";
}
} catch(_e){
continue;
}
}
document.getElementById("divShow").innerHTML = strOut;
}
catch (ex) {
$("#divShow").html("你输入的对象不存在OR 此对象没有可调的方法:<br/>" + ex);
}
});
这里如果输入window.document这样的,结果只是遍历出document的方法...
for (var i = 0, j = arr.length; i < j; i++){
obj = obj[arr[i]];
}这里的花括号应该挪到下面的for循环后面
不过我也学习了,哈哈
2、native code是原生代码,基本上浏览器不会暴露
3、ecmascript的一个特点就是函数的参数不是固定的,你遍历?咋遍历?
4、楼主应该是玩C#和asp.net的。所以可能会对反射有兴趣,但是每个语言有每个语言的特点。何必强求呢最后嘛,http://www.baidu.com/s?wd=javascript+%B1%E9%C0%FA%BA%AF%CA%FD+site%3Atopic.csdn.net&rsv_bp=0&rsv_spt=3&inputT=22870
如何快捷 学会JScript and DOM
并且 可以 随心所意的玩转它?
请求高手指个方向。
实用不?
-------------------------------------------------------------------------------现在,当然不是很实用,
但 你是知道的。
这些功能是代码写的,
非常好移接。
当然 可以直接 加到项目中。 你说能不实用吗?
纯粹为了接分
---------------------------------------------------------------------------
sorry贴子已结了,没法给分了。
ECMAScript Language Specification汉化版嘛,自己搜索