构造函数与原型对象

1.构造函数中的属性和方法我们称为成员,成员可以添加
2.实例成员===构造函数内部通过this添加的成员 uname,age,sing 就是实例成员(实例成员只能通过实例化的对象来访问)
3.静态成员 ==== 在构造函数本身上添加的成员 (静态成员只能通过构造函数来访问)

构造函数的问题
构造函数方法很好用,但是存在浪费内存的问题
构造函数原型prototype,构造函数通过原型分配的函数是所有对象所共享的。
1.原型是什么?一个对象,我们称prototype为原型对象
2.原型作用?共享对象
3.一般我们的公共属性定义到构造函数里面,公共的方法我们放到原型对象身上

//构造函数中的属性和方法我们称为成员,成员可以添加
        function Sttar(uname, age){
            this.uname =  uname;
            this.age = age;
        }
        Sttar.prototype.sing = function(){
            console.log('我会唱歌');
        }
        var xm = new Sttar('小明', 18);
        var xh = new Sttar('小红', 16);
        //实例成员===构造函数内部通过this添加的成员 uname,age,sing 就是实例成员
        console.log(xm.uname);//实例成员只能通过实例化的对象来访问

        //静态成员  ==== 在构造函数本身上添加的成员
        Sttar.sex = '男';
        console.log(Sttar.sex);  //静态成员只能通过构造函数来访问

        console.dir(Sttar);
        xm.sing();
        xh.sing();
        console.log(xm);//每个对象身上都有一个_proto_属性指向构造函数的原型对象
        console.log(xm.__proto__);
        console.log(Sttar.prototype === xm.__proto__);
   

利用原型链扩展内置对象

console.log(Array.prototype);
    Array.prototype.sum = function(){
        var sum = 0;
        for(var i = 0; i < this.length; i++){
            sum += this[i];
        }
        return sum
    }
    var arr = [1,2,3];
    console.log(Array.prototype);
    console.log(arr.sum());

继承
ES6之前通过构造函数+原型对象模拟实现继承,称为组合继承

 function fn(){
        console.log('5225225');
        console.log(this)
    }
    var ss = {
        name:'ddd'
    }
    fn.call();
    //fn.call(ss);

    //子继承父的属性
    function Dad(uname, age){
        this.uname =  uname;
        this.age = age;
    }
    Dad.prototype.money = function(){
        console.log(10000)
    }
    function Child(uname, age, score){
        Dad.call(this, uname, age);
        this.score = score;
    }
    Child.prototype = new Dad();
    Child.prototype.constructor = Child;
    Child.prototype.exam = function(){
        console.log('考试');
    }
    var child = new Child('小明', 15, 80);
    console.log(child);
    console.log(Dad.prototype);
    console.log(Child.prototype.constructor)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值