JavaScript课程——Day05(函数封装、获取元素样式、浏览器能力判断、this、自定义属性)

1、函数封装

函数的封装是把一个或者多个功能通过函数的方式封装起来,对外只提供一个简单的函数接口

 

  1.1、获取元素样式

    1.1.1、标准浏览器

getComputedStyle(元素) 
返回的是一个对象,IE8及以下不支持
// Computed 计算
// window.getComputedStyle(元素)   返回这个元素所有的样式,是一个对象
// IE8及以下不支持
var s = getComputedStyle(box); // {}
console.log(typeof s); // 'object'

console.log(s.width);
console.log(s.height);
console.log(s.backgroundColor);

 

    1.1.2、IE浏览器支持

元素.currentStyle
返回的是一个对象
// current 当前
// 元素.currentStyle   返回这个元素所有的样式,是一个对象
var s = box.currentStyle;
console.log(s);
console.log(typeof s); // 'object'

console.log(s.width);
console.log(s.height);
console.log(s.backgroundColor);

 

  1.2、浏览器能力判断

// 浏览器能力判断
console.log(window.getComputedStyle); // 在IE9及以上,返回一个函数,在IE8及以下,返回undefined

if (window.getComputedStyle) {
    // IE9及以上
    console.log(getComputedStyle(box).width);
} else {
    // IE8及以下
    console.log(box.currentStyle.width);
}

 

  1.3、封装

  • 声明函数,把主要代码放入函数中
  • 找函数中可变量做参数,带入函数中
  • 调用,调试
// 封装  ele元素   attr样式属性
function getStyle(ele, attr) {
    if (window.getComputedStyle) {
        // IE9及以上
        return getComputedStyle(ele)[attr];
    } else {
        // IE8及以下
        return ele.currentStyle[attr];
    }
}

console.log(getStyle(box, 'width'));
console.log(getStyle(box, 'height'));
console.log(getStyle(box, 'backgroundColor'));

 

2、this

  • 谁调用了函数,this就指向谁
  • this不是在定义的时候确定的,而是在调用函数的时候确定的

this种类:

普通函数中的this

事件函数中的this

对象方法中的this

function fn() {
    console.log(this);
}

// 1、普通函数调用的this
fn(); // window调用了函数

// 2、事件函数中的this
box.onclick = fn; // box调用了函数

// 1和2综合
// box.onclick = function () { // box
//     fn(); // window
// }

// --------------------------------
// 3、对象的方法中的this
var obj = {
    name: 'zs',
    fn: function () {
        console.log(this);
    }
}

obj.fn(); // fn这个函数中的this为obj这个对象

var v = obj.fn;
v(); // window

 

this面试题

var name = '李四';
var obj = {
    name: '张三',
    fn: function () {
        console.log(this.name);
    }
}

obj.fn(); // 张三

var v = obj.fn;
v(); // 李四

 

3、自定义属性

<!-- id class title 原生自带的属性 -->
<!-- msg 自定义的属笥 -->
<div id="box" class="abc" title="关灯吃面" msg="平头哥">小王</div>

<script>
    var box = document.getElementById('box');

    // 写在标签上的自定义属性,可以在html结构中查看,但是js不能操作(点和中括号的方式不能操作)
    console.log(box.title);
    console.log(box.msg);

    // ------------------------------
    // 通过js添加的自定义属性,在html结构中不可见,但可以通过js获取
    box.ddd = '东风吹,战鼓擂'; // 添加自定义属性
    console.log(box.ddd);
</script>

 

posted @ 2021-04-23 21:55  别动我咖喱  阅读(97)  评论(0编辑  收藏  举报