前端 - javascript中.和[]的区别
PHP中文网
PHP中文网 2017-04-10 18:05:47
[JavaScript讨论组]

写了一个动画函数,发现如果将elm.style[attr]改为elm.style.attr后;函数就失去作用了,why?

function animation(elm,attr,from,to){
    var distance = Math.abs(to - from);
    var attr = attr;
    //假设动画50ms一次
    var stepLength = distance / 50;
    var sign = (to - from) / distance;
    var offset = 0;
    function step(){
        offset = offset + stepLength;
        if(offset < distance){
            elm.style[attr] = from +  offset * sign + 'px'; 
        } else {
            elm.style[attr] = to + 'px';
            clearInterval(Interval);
        }
    }
    var Interval = setInterval(step, 20);
}
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
PHP中文网

这个问题是这样的,原本elm.style是一个对象,你想知道两种调用方式有什么不同。
JavaScript中对象属性有两种调用方式,一种是点"."一种是"[]"
一般情况下我们使用点调用属性的方式,但是当obj的某个属性是一个变量时(你的attr在这里是一个字符串),这种点调用的方式就行不通了,想想看obj.'property'这样的方式不对;
所以,如果对象内的属性是一个变量,只能使用[]调用。

大家讲道理

elm.style.attr相当于elm.style["attr"],这个和elm.style[attr]是有差别的,自己体会下

黄舟

attr 是变量名,或者说是函数参数,最终生效的是传进来的字符串,比如 'width',那么会被替换成 style['width']相当于style.width
style.attr则不会把attr 当作变量处理,style 没有 attr 这个属性当然会出错。

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

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