js高级

变态面试题

2019-05-27  本文已影响0人  椋椋夜色

<!DOCTYPE html>
<html lang="zh-CN">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> 变态面试题 </title>

    <script>
        // //------------------变态面试题---------------------
        // function Foo() {
        //     getName = function () {
        //         alert(1);
        //     };
        //     return this;
        // }
        // Foo.getName = function () {
        //     alert(2);
        // };
        // Foo.prototype.getName = function () {
        //     alert(3);
        // };
        // var getName = function () {
        //     alert(4);
        // };

        // function getName() {
        //     alert(5);
        // }

        // Foo.getName(); // ?
        // getName(); // ?
        // Foo().getName(); // ?
        // getName(); // ?
        // new Foo.getName(); // ?
        // new Foo().getName(); // ?
        // new new Foo().getName(); // ?
    </script>
    <script>

            var now = new Date();
        // 直接打印日期对象,相当于调用它的toString方法
        // console.log(now);
        // console.log(now.toString());

        //所以如果想看属性,就要用console.dir打印
        console.dir(now);
        // now.getDate(); //找的是Date.prototype里提供的方法

        // console.log(now.__proto__ === Date.prototype);
        // console.log(now.__proto__.__proto__  == Object.prototype);
        // console.log(now.__proto__.__proto__.__proto__);

        // console.log(now.__proto__);
        // function Person() {}
   
        
        // var arr = new Array(10, 20, 30, 40, 50);

        // // Array 原型
        // console.log(arr.__proto__ === Array.prototype); // true
        // // Object原型
        // console.log(arr.__proto__.__proto__ === Object.prototype); // true
        // // null
        // console.log(arr.__proto__.__proto__.__proto__); // null
     
        // console.log(Person.prototype.__proto__); // Object 原型
        // // Object 原型
        // console.dir(Person.__proto__); //true
        // console.log(Person.__proto__); //true
        // // null
        // console.log(Person.prototype.__proto__.__proto__ ); // null

        // console.log(Person.prototype); // Person 先找自身
        // console.log(Person.prototype.__proto__); // object 找构造函数的原型
        // console.log(Person.prototype.__proto__.__proto__); // null找
        // console.log(Person.prototype.__proto__.__proto__.__proto__); // 报错

        // console.log(arr.__proto__); // Array()
        // console.log(arr.__proto__.__proto__); // Object()
        // console.log(arr.__proto__.__proto__.__proto__); // null 
        // console.log(arr.__proto__.__proto__.__proto__.__proto__); // 报错



        // 原型: 当创建一个函数的时候, 函数自身会有一些属性的方法, 其中有一个属性叫prototype, 它就是原型。
        // 只要是函数都有原型
        // 原型是解决性能问题的。
        // 构造函数的原型, 只有它的实例化对象可以使用。

        // 对象 都有__proto__( 原型链)
        // 类 都有prototype( 原型)
        // 函数的三个角色: 1. 函数 2. 对象 3. 类

        // 换句话: 如果对象上没有; 还会( 通过自身的原型链) 找到构造函数的原型。 如果还没有会( 通过构造函数的原型链) 找到Object的原型 为止。 再没有就变量( undefined) 函数( 报错)。( 注意: 永远三步走, 自身- > 构造函数的原型 - > Object的原型)
    </script>
    


</head>

<body>


    <!-- <script src="../../Mymethod.js "></script> -->
    <script>
        // var wangjianlin = {
        //     house: {
        //         price: 10000000,
        //         adress: '洛杉矶'
        //     },
        //     car: {
        //         price: 5000000,
        //         brand: '劳斯莱斯幻影'
        //     }
        // };
        // //好男人构造函数
        // function GoodMan(wife) {
        //     this.wife = wife;
        // }
        // //每一个好男人都有会煮饭的方法.
        // GoodMan.prototype.ZhuFan = function () {
        //     console.log(this.wife + "我是好男人,我会煮饭和带娃...");
        // }

        // //实例化好男人对象.
        // var s1 = new GoodMan('林嫂');
        // s1.ZhuFan();
        // console.log(s1);

        // liang.extend(wangjianlin, GoodMan);
    </script>

</body>

</html>

上一篇下一篇

猜你喜欢

热点阅读