ProtoType--原型以及原型链

1、不使用prototype属性定义的对象方法
静态方法,只能直接用类名进行调用!另外,此静态方法中无法使用this变量来调用对象其他的属性!
2、使用prototype属性定义的对象方法
非静态方法,只有在实例化后才能使用!其方法内部可以this来引用对象自身中的其他属性!

<!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>
        // var person1={
        //     name:'za',
        //     age:15,
        //     eat:function(obj){
        //         console.log(obj)
        //     }
        // }
        // console.log(person1.eat("niahoi"));

        // function Person(name,age){//构造函数,也称为类
        //     this.name=name,
        //     this.age=age,
        //     this.play=function(obj){
        //         console.log(obj)
        //     }
        // }
        // var person1=new Person('za',10);
        // console.log(person1);
        // console.log(person1.play('asdsa'));
        // 若像上述的构造函数一样将方法写在构造函数中在,
        // 则每次实例化新的对象时都要new一个play方法,太占内存和运行时间

        // 故采用prototype:原型
        // prototype是构造函数(类)下的一个属性,指向原型对象(原型对象有一个constructor属性,指向构造方法)
        // 声明在原型对象下的属性和方法可以被所有实例化对象所共享
        function Person(name, age) {
            this.name = name,
                this.age = age
        }
        Person.prototype.play = function (obj) {
            console.log(obj);
        }
        var person1 = new Person('za', 10);
        console.log(person1)
        person1.play('hello');
        var person2 = new Person('sa', 15);
        console.log(person2);


        // 原型链
        //     当从一个对象那里调取属性或方法时,如果该对象自身不存在这样的属性或方法,
        //     就会去自己关联的prototype对象那里寻找,如果prototype没有,
        //     就会去prototype关联的前辈prototype那里寻找,
        //     如果再没有则继续查找Prototype.Prototype引用的对象,
        //     依次类推,直到Prototype.….Prototype为undefined
        //     (Object的Prototype就是undefined)从而形成了所谓的“原型链”。

        // function Person(name,age){
        //     this.name=name,
        //     this.age=age
        // }
        // Person.prototype.sex='f';
        // var person3=new Person('we',5);
        // console.log(person3.sex);



        // prototype 原型  构造函数有一个prototype属性 
        // 属性指向原型对象  (原型对象下有一个constructor属性 指向构造函数) 
        // 声明在原型对象下的属性和方法可以被所有实例化对象所共享
        // __proto__  实例对象下的属性  指向的是构造函数下的原型对象

        /*
            原型链
            当从一个对象那里调取属性或方法时,如果该对象自身不存在这样的属性或方法,
            就会去自己关联的prototype对象那里寻找,如果prototype没有,
            就会去prototype关联的前辈prototype那里寻找,
            如果再没有则继续查找Prototype.Prototype引用的对象,
            依次类推,直到Prototype.….Prototype为undefined
            (Object的Prototype就是undefined)从而形成了所谓的“原型链”。
        */
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值