js中的prototype使用的问题????

js中的prototype使用的问题newbase.jsvar$=function(){returnnewBase();}//创建一个数组,来保存获取的节点和节点数组**... js中的prototype使用的问题
new
base.js
var $ = function ()
{
return new Base();
}
//创建一个数组,来保存获取的节点和节点数组*****************
function Base() {}
Base.prototype.elements = [];
//创建一个数组,来保存获取的节点和节点数组****************
function Base()
{
this.elements = [];
}
//获取ID节点
Base.prototype.getId = function (id) {
this.elements.push(document.getElementById(id));
return this;
};
//获取元素节点
Base.prototype.getTagName = function (tag) {
var tags = document.getElementsByTagName(tag);
for (var i = 0; i < tags.length; i ++) {
this.elements.push(tags[i]);
}
return this;
};
以上****号处这两种写法有什么不同,为什么测试获取的数组的值不一样
html代码
box
段落
段落
段落
demo.js
window.onload = function ()
{
$().getId('box').css('color','red');
alert($().getTagName('p').elements.length);
};
结果:把数组定义在函数体内(*处位置的不同)得到是3,而通过prototype方式,获得数组的长度确实4,这是怎么回事???
展开
 我来答
yingjianglinx
2014-12-24 · 超过33用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:65.1万
展开全部

我没有去测试代码,但是我可以解释下这2种情况

  1. 第一种情况

    //创建一个数组,来保存获取的节点和节点数组*****************
    function Base()
    {
        this.elements = [];
    }

    这里的elements是属于各自的对象的,也就是通过new 出的对象,由于你的写法返回的是一个new Base()的对象,因此$()这个操作实际上是返回的一个Base对象,

    然后 你在window.onload中写了2个语句,如下

    $().getId('box').css('color','red');   (这里的$()和下面一句的$()是2个不同的对象,虽然看起来一样,但是他们拥有自己的elements属性,因此此语句的这个$().elements 是1,而下面那个$()的对象是3,也就是3个P标签)
    alert($().getTagName('p').elements.length);这里的$()是一个新对象,返回3个P

  2. 第二种情况

    function Base() {}
    Base.prototype.elements = [];

    放在prototype中的属性,是所有对象共享的,因此下面2句访问的是共享的elements

    $().getId('box').css('color','red');
    alert($().getTagName('p').elements.length);

    第一句往共享的原型链对象elements放了一个box,第二句往共享的原型链对象elements放了3个p,所以elements总共是4个元素,不管你创建多少$(),都指向同一个!


推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式