JS高级day01

个人理解,对象里的__proto__和构造函数里的prototype ,都放着是一个原型对象,里面一模一样

对象.proto --》 在chrome浏览器 打印出时个object,而在IE8打印出时个undefine 。 因为对象的 __proto__这不是一个标准的属性 。

所以,我们假如用原型的话就用 构造函数名.prototype ,这才是我们程序员用的

重点来了!

构造函数的prototype 这个属性放着原型对象,prototype 里的construtor 指向的是自己的构造函数
**其实是可以这样的,实例对象.proto.eat() 等同于 实例对象.eat() ** ,但因为__proto__ 不是一个标准属性,所以都用实例对象.eat()

三者关系

补充知识

构造函数 其实本来就已经 含着原型对象了 。 另外,实例对象是由构造函数创造出来的

原型的作用


原型的简单写法


实例对象使用属性和方法层层的搜索

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function Person(age,sex){
            this.age = age;
            this.sex = sex;
            this.eat=function(){
                console.log("构造函数中的吃");
            }
        }
        Person.prototype.sex = "女";

        var per = new Person(20,"男");
        console.log(per.sex);  //输出的 是男 而不是女  ,-》为什么呢
        console.dir(per);
    </script>
</head>
<body>

</body>
</html>

答案:先从实例对象找,。然后再从原型对象找


局部变量编程全局变量

什么是自调用函数

另外:window对象时可以省略掉的

(把局部变量给window就可以了)


把随机数对象暴露给window成为全局对象

代码+完美解释

//        js是一门动态类型的语言,对象, 有.点 就可以创建对象

        (function (win){
            //弄个构造函数先
            function Random(){

            }
            //在原型对象中添加方法
            Random.prototype.getRandom = function(min,max){
                return Math.floor(Math.random()*(max-min)+min);
            };
            //把Random对象暴露给顶级对象window -->外部可以直接使用这个对象
            win.Random = Random; //这个Random 代表了一个构造函数 ,将它赋给win的Random属性
        })(window);
        var rm = new window.Random(); //这个window对象可以省略的 ,直接写成  var rm = new Random(); 也行
        console.log(rm.getRandom(0,5));
posted @ 2018-09-14 09:13  Pororo  阅读(148)  评论(0编辑  收藏  举报