fengchuanyu 4 сар өмнө
parent
commit
ebcdbcb765

+ 71 - 0
6_ES6/16_this指向.html

@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Document</title>
+</head>
+<body>
+    <div id="box">hello</div>
+    <script>
+        // this 指向 谁调用的函数this就指向谁
+        // this 指向问题 场景一
+        // let obj = {
+        //     name: '张三',
+        //     age:18,
+        //     sex:"男",
+        //     talk(){
+        //         console.log(this.name);
+        //     }
+        // }
+        // obj.talk();
+        // this 指向问题 场景二
+        // let oBox = document.getElementById('box');
+        // oBox.onclick = function(){
+        //     console.log(this);
+        // }
+
+        // function foo(){
+        //     console.log(this);
+        // }
+        // foo();
+
+        // var a = 10;
+        // console.log(this.a);
+        // console.log(window.a);
+
+        // let obj = {
+        //     name: '张三',
+        //     talk(){
+        //         console.log(this.name);
+        //         function foo(){
+        //             console.log(this)
+        //         }
+        //         foo();
+        //     }
+        // }
+        // obj.talk();
+
+        // window.setTimeout(function(){
+        //     console.log(this);
+        // },1000)
+
+        let obj = {
+            name: '张三',
+            age:18
+        }
+        var age = 19;
+        function foo(a){
+            console.log(this.age,a);
+        }
+        // foo("hello");
+        // call 可以改变this指向 参数有多个 第一个是this指向新对象 后面的参数是传入foo的参数
+        // foo.call(obj,"hello");
+        // apply 可以改变this指向 参数只有两个 第一个是this指向新对象 第二个是数组 里面是传入foo的参数
+        // foo.apply(obj,["hello"]) 
+        // bind 可以改变this指向 参数有多个 第一个是this指向新对象 后面的参数是传入foo的参数
+        // let foo2 = foo.bind(obj,"hello");
+        // foo2();
+    </script>
+</body>
+</html>

+ 124 - 0
6_ES6/练习题3_this指向.html

@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  <meta http-equiv="X-UA-Compatible" content="ie=edge">
+  <title>Document</title>
+</head>
+
+<body>
+  <script>
+    //1、写出下列输出结果
+    var x = 10;
+    function test() {
+      this.x = 20
+      console.log(this.x)
+    }
+    test()
+
+
+    //2、写出下列输出结果
+    var name = "window"
+    var obj = {
+      name: "obj",
+      func1: function () {
+        console.log(this.name);
+        (function () {
+          console.log(this.name)
+        })()
+      }
+    }
+    obj.func1()
+
+
+    //3、写出下列结果
+    var name = "the window";
+
+    var object = {
+      name: "My Object",
+      getName: function () {
+        return this.name;
+      }
+    }
+
+    console.log(object.getName());
+    console.log((object.getName)());
+    console.log((object.getName = object.getName)());
+
+    //4、下列代码中当div的点击事件触发时输出的结果是?
+    document.getElementById("div").onclick = function () {
+      console.log(this)
+    };
+
+
+    //5、请写出下列代码运行结果
+    var name = "window"
+    var obj = {
+      name: "obj"
+    }
+    window.setInterval(function () {
+      console.log(this.name)
+    }, 300)
+    window.setInterval(function () {
+      console.log(this.name)
+    }.call(obj), 300)
+
+    //6、请补全下列代码
+    function foo() {
+      //补全此处代码实现每隔一秒输出 hello world
+    }
+    window.setInterval(foo(), 1000);
+
+
+    // 7、补全下列代码实现 1+2+3+4
+    function add(c, d) {
+      return this.a + this.b + c + d;
+    }
+
+    /*
+      在此补全代码 以两种以上方法实现
+    */
+
+
+
+    //8、写出下列输出结果
+    function f() {
+      return this.a;
+    }
+
+    var g = f.bind({ a: "azerty" });
+    console.log(g());
+
+    var h = g.bind({ a: 'yoo' });
+    console.log(h());
+
+    var o = { a: 'loveCoding', f: f, g: g, h: h };
+    console.log(o.f(), o.g(), o.h());
+
+
+    //9、补全下列代码
+    var o = { prop: 'loveCoding' };
+
+    function independent() {
+      return this.prop;
+    }
+    //在此补全代码
+    console.log(o.f()); //  loveCoding
+
+    //10、用call 或 apply 实现bind 方法
+    function foo() {
+      console.log(this.a)
+    }
+    var obj = {
+      a: "hello"
+    }
+
+
+    var foo2 = foo.bind2(obj);
+    foo2()
+  </script>
+</body>
+
+</html>