Javascript 构造函数和原型及原型链

js 在es6以前没有类的概念,使用构造函数和原型来模拟类

es6 中类的使用,可参考Javascript 类-CSDN博客

1.js创建对象有三种方式:

        //1.对象字面量
        var obj = new Object();

        //2.new Object()
        var obj1 = {};

        //3.自定义构造函数  /*使用构造函数可创建多个对象*/
        function Func(name,age)
        {
            this.name = name;
            this.age = age;
            this.fn = function(){
                console.log(this.name);
            }
        }

        var jack = new Func('jack');
        jack.fn();

2.实例成员和静态成员

构造函数中的属性和方法称为成员

        1.实例成员就是构造函数内部通过this添加的成员

             实例成员只能通过实例化的对象来访问

        2.静态成员 在构造函数本身上添加的成员

             静态成员只能通过构造函数来访问

function Func(name,age)
        {
            this.name = name;   //实例成员
            this.age = age;     //实例成员
            this.fn = function(){
                console.log(this.name);
            }
        }

        var jack = new Func('jack',20);
        console.log(Func.name)  //error /*不能用构造函数访问实例成员*/

        Func.sex = 'male';
        console.log(Func.sex);  //male
        console.log(jack.sex);  //undefine /*不能通过对象访问*/

3.构造函数原型对象 prototype

构造函数存在浪费内存的问题,不同对象会创建多个相同方法

把方法直接定义在 prototype对象上,所有对象的实例就可以共享这些方法

function Func(name,age)
        {
            this.name = name;   
            this.age = age;     
        }

        Func.prototype.fn = function(){
                        console.log(this.name);
                    }

        var jack = new Func('jack',20);
        var leo = new Func('leo',20);
        console.log(Func.prototype)

4.对象原型  __proto__

5.原型 constructor 构造函数

如果修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动利用 constructor 指回原来的构造函数

function Func(name,age)
        {
            this.name = name;   
            this.age = age;     
        }

 Func.prototype = {
            constructor:Func,   //手动把 constructor 指回Func
            fn:function()
            {
                console.log(this.name);
            },

            fn1:function()
            {
                console.log(this.age);
            }
        }
        var jack = new Func('jack',20);
        var leo = new Func('leo',20);
        console.log(Func.prototype.constructor)
        console.log(jack.__proto__.constructor)

6.构造函数、实例、原型对象间的关系

7.原型链

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值