js高级关于原型基本介绍

理论基础:先介绍创建对象的三种方式
1、字面量的方式
2、调用系统构造函数
3、自定义创建对象

	//使用自定义构造函数创建对象
	function Peroson(name,age){
        this.name=name;
        this.age=age;
        this.eat=function () {
            console.log("吃火锅");
        }
    }
    var per1=new Peroson("小白",20);
    var per2=new Peroson("小黑",10);
    per1.eat();
    per2.eat();
    console.log(per1.eat == per2.eat);

使用自定义构造函数创建对象带来的问题:浪费空间,数据不能共享
解决办法:通过原型来解决:数据共享,节省空间

	解决案例:
	//1、自定义构造函数
    function Person(name,age){
        this.name=name;
        this.age=age;
    }
    //2、通过原型来添加方法,作用:数据共享,节省空间
    Person.prototype.eat=function () {
        console.log("吃火锅");
    }
    //3、实例化对象
    var per1=new Person("小白",18);
    var per2=new Person("小黑",20);

    console.log(per1.eat == per2.eat);//true,说明是同一种方法(数据共享)

那么什么样的数据写在原型中?
需要共享就写在原型中,不需要共享则写在构造函数中
接下来,再写个例子?

	//需求:
	//人物:学生一,学生二,姓名不同,年龄不同
    //身高都是170,每天写500行代码,吃10块钱的饭
    
    function Student(name,age) {
        this.name=name;
        this.age=age;
    }
    Student.prototype.height=170;//身高相同(共享的数据)
    Student.prototype.code=function () {
        console.log("写500行代码");
    };
    Student.prototype.eat=function(){
        console.log("吃10块钱的饭");
    };

    var stu1=new Student("小白",18);
    var stu2=new Student("小黑",20);
    console.log(stu1.height==stu2.height);//true(说明数据共享)
    console.log(stu1.code==stu2.code);//true(说明数据共享)
    console.log(stu1.eat==stu2.eat);//true(说明数据共享)

清楚了数据共享后,同时原型对象中的方法也是可以互相访问
同样,还是写个例子说明一下?

	function Dog(name,height){
        this.name=name;
        this.hright=height;
    }
    //在原型上添加方法
    Dog.prototype.eat=function () {
        console.log("吃狗粮");
        this.play();//在当前方法中调用play()方法,说明了方法是可以互访的
    }
    Dog.prototype.play=function () {
        console.log("玩尾巴");
    }
    //调用eat()方法
    var dog1=new Dog("大黄",50);
    dog1.eat(); //吃狗粮的同时还可以玩尾巴
    
    //那么如果原型对象中有重名会如何执行?以上述为例?
    Dog.prototype.name="小黄";
    console.log(dog1.name);//打印输出为"大黄"
    
    总结:查找属性会先从构造函数所创建的实例对象中去找,
    找不到则去原型对象中找,再找不到则输出undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值