JavaScript属性的问题?
伊谢尔伦
伊谢尔伦 2017-04-10 18:09:29
[JavaScript讨论组]
function CascadeItem(options,cascade)
    {
        //this.ele=$(options['selector']);
        //this.ele.data('cascadeItem_instance',this);
        this.options= $.extend(this.options,options);

        //var container=this.options.container===null?this.options.selector:this.options.container;
        //var $container=this.ele.closest(container);
        //this.container=$container.wrap(this.options.tpl).parent();
        //this.requires=[];
    }
CascadeItem.prototype={
        options:{
            tpl:'<p class="col-block hidden2"></p>',
            container:null
        }
    };
var items= [
        {
            selector: '#sel1',
            selected: '1',
            container:'.form-inline'
        },
        {
            selector: '#sel2',
            requires: ['#sel1'],
            container:'.form-inline'
        },
        {
            selector: '#sel3',
            requires: ['#sel1', '#sel2'],
            container:'.form-inline'
        }
    ];
    var items2=[];
    var $ele=$('#selCon');
    $.each(items,function(index,item)
    {
        
        var o=new CascadeItem(item,$ele);
        items2.push(o);
    });
    console.log(items2);

为何最后创建的CascadeItem对象的options属性都是一样的呢?

this.options= $.extend(this.options,options);

上面的代码不知道有什么问题?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
巴扎黑

因为这一段代码

CascadeItem.prototype={
    options:{
        tpl:'<p class="col-block hidden2"></p>',
        container:null
    }
};

把这一段去掉就可以了。
原因分析:
一开始CascadeItem的构造函数是指向CascadeItem.prototype的,现在你重写了CascadeItem.prototype也就是改写了CascadeItem的构造函数,所以后面创建的实例的时候

this.options= $.extend(this.options,options);

这一句相当于

CascadeItem.prototype.options = $.extend(CascadeItem.prototype.options,options);

而所有对象实例都是共享一个CascadeItem.prototype的,所以CascadeItem.prototype是最后一次的修改内容。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号