JS高级day01

JS原型与构造函数解析

1175089-20180913135042132-1615339342.png

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

1175089-20180913174511482-1500003421.png

1175089-20180913174704463-266656715.png

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

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

1175089-20180913175247368-17531095.png

重点来了!

1175089-20180913175552556-114742710.png

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

三者关系

1175089-20180913183115106-2112397422.png

1175089-20180913183754362-452463713.png

补充知识

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

1175089-20180913191317253-1977318496.png

原型的作用

1175089-20180913191624548-1524748077.png


原型的简单写法

1175089-20180913193539778-782954694.png


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

<!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>

1175089-20180913200858468-738813309.png

答案:先从实例对象找,。然后再从原型对象找
1175089-20180913201513393-246047568.png


局部变量编程全局变量

什么是自调用函数

1175089-20180913205618880-1838091866.png

1175089-20180914093650964-1309298752.png

1175089-20180914093713745-1925486061.png

另外:window对象时可以省略掉的
1175089-20180913204619977-267369686.png

(把局部变量给window就可以了)
1175089-20180913204658516-1253398825.png

1175089-20180913204820982-1619624265.png


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

1175089-20180913210530979-324019616.png

代码+完美解释

//        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));

转载于:https://www.cnblogs.com/czy16/p/9644572.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值