求高手帮忙。如何把参数id传递到prototype属性中,为什么alert($L("#myid").innerHTML);这句话不好使?

wonota 2017-01-18 05:53:56


var $L = function (id){
var re = new RegExp("#(\\w+)","i");
//test() 方法用于检测一个字符串是否匹配某个模式
var result = re.test(id);
this.Lid = document.getElementById(RegExp.$1);
return new $L.fn.init(id);
}




$L.fn = $L.prototype;

$L.fn = {
innerHTML:Lid.innerHTML,
/*
add: function(x, y) {
return x + y;
},
subtract: function(x, y) {
return x - y;
},
*/
zo:function(){
return {a:'a1',b:'b1'};
}
};


$L.fn.init = function (id){
var re = new RegExp("#(\\w+)","i");
var result = re.test(id);
this.xid = document.getElementById(RegExp.$1);

}

$L.fn.init.prototype = $L.fn;




<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="public.js"></script>
</head>

<body>


<div id="myid">asdfg</div>

<script type="text/javascript">

//alert(document.getElementById("myid"))

//$L("#myid").xid.innerHTML="开始";

/*
$L("#myid").click_L(function() {
alert("ok");
}).css("backgroundColor",'blue').mouseover(function(){
$L("#myid").css("background-color","yellow");
});
*/
alert($L("#myid").innerHTML);


</script>
</body>
</html>




为什么alert($L("#myid").innerHTML);这句话不好使?
...全文
220 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wonota 2017-01-22
  • 打赏
  • 举报
回复
谢谢楼上的各位
wonota 2017-01-20
  • 打赏
  • 举报
回复
引用 1 楼 jslang 的回复:
$L("#myid")返回的是我们自己定义的一个类似jquery的对象,和用 document.getElementById("myid") 返回的DOM对象不一样 $L("#myid")返回的对象中只有我们自己定义的一些属性和方法,没有DOM对象的属性和方法。 在$L("#myid")返回的对象中有我们自己定义一个xid属性,这个xid属性才是DOM对象,只有用$L("#myid").xid才能使用DOM对象的属性和方法。
大神,prototype如何获取构造函数的值 我想把this.Lid = document.getElementById(RegExp.$1);传递到 prototype 中 请问怎么实现?
jshulym 2017-01-20
  • 打赏
  • 举报
回复
var $L = function (id){ return new $L.fn.init(id); }; $L.fn = $L.prototype = { //只有这样才能把属性与方法添加到对象原型中,你那样分开写等于为$L.fn赋值了两次,第二次覆盖了第一次的赋值 innerHTML:Lid.innerHTML, //这一句完全就错了,Lid.innerHTML不知道是干什么的,innerHTML是DOM对象的方法,既然是方法后面为什么没有加上()呢!其实加上也不见的就算完了,从this.Lid = document.getElementById(RegExp.$1);这一句中可以看出Lid是new $L(id)对象的属性,你连对象都不存在是如何得到对象属性的呢。。。我们知道return new $L.fn.init(id)一般返回的都是一个DOM对象的集合,在定义对象方法的时候时候一般都会遍历这个集合 init:function(id){ //在这里面来写吧,写外面去也可以(为了封装还是写里面好,你外面的$L.fn.init = function (id){}就可以去掉了) //添加你的参数验证规则,把你查找到的DOM元素添加到this对象中,然后返回this。 } }; $L.fn.init.prototype = $L.fn; //虽然仅仅只是一条语句,感觉这一句才是jquery实现的核心,真正理解了这一句的含义所有的都不是问题了
天际的海浪 2017-01-20
  • 打赏
  • 举报
回复
$L.fn.init才是真正的构造函数。你要设置document.getElementById(RegExp.$1)已经在init构造函数中设置了。 你在$L函数设置的 this.Lid = document.getElementById(RegExp.$1); 是多于的。而且$L函数都是以普通函数的方式调用的,函数内的this指向的是 window 对象。 再有, prototype 中的内容都是所有实例对象共用的,一般只在 prototype 中设置对象的方法,不应该设置属性。 对象的属性应该在构造函数中直接设置在实例对象中,不要在prototype 中设置。
天际的海浪 2017-01-18
  • 打赏
  • 举报
回复
$L("#myid")返回的是我们自己定义的一个类似jquery的对象,和用 document.getElementById("myid") 返回的DOM对象不一样 $L("#myid")返回的对象中只有我们自己定义的一些属性和方法,没有DOM对象的属性和方法。 在$L("#myid")返回的对象中有我们自己定义一个xid属性,这个xid属性才是DOM对象,只有用$L("#myid").xid才能使用DOM对象的属性和方法。

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧