JavaScript高级笔记02 原型及原型链

1.成员

  • 构造函数中的属性和方法我们称为成员,成员可以添加
  • 实例成员:构造函数内部通过this添加的成员。只能通过实例化的对象访问。
  • 静态成员:在构造函数本身上添加的成员。只能通过构造函数访问

2.原型及原型链

2.1构造函数原型
  • prototype ,函数名.prototype.方法
  • 每一个构造函数都有一个原型对象
  • 一般情况下,我们的公共属性定义到构造函数里面,公共方法放到原型对象身上
  • 优点:节省内存,共享方法
  • 值是一个地址,指向一个空间
2.2对象原型
  • _ _ proto_ _ ,任何对象都有对象原型
  • 对象身上系统自己添加一个__proto__指向我们构造函数的原型对象prototype
  • 方法的查找规则:首先先看对象身上是否有方法,如果有就执行对象身上的方法;如果没有方法,因为__proto__的存在,就去构造函数的原型对象prototype身上去查找方法
2.3constructor
  • 构造函数原型和对象原型都有这个属性
  • 指回构造函数本身,记录对象引用了哪个构造函数
  • 原型链成员查找规则:
    1. 先找自身是否有这个方法
    2. 再找原型对象身上是否有方法
    3. 接着找Object原型对象身上是否有这个方法
    4. 如果都没有,就是空null,返回undefined
    5. 找到了就输出,就近原则

3.调用函数的几种模式

  1. 函数模式,this=>window
    function fn(){};
    fn();
  2. 方法模式,this=>函数的调用者
    var obj = {say:function(){}};
    obj.say();
  3. 构造函数模式,this=>实例
    function p(){};
    var person = new p;
  4. 上下文调用模式,this=>实例
    var o = {};
    function fun(){};
    fun.call(o);

4.call语法

  • 语法:方法名.call()
  • 目的:方法的借用
  • 关于参数
    1. 当不传参时,相当于是函数模式,调用函数
    2. 当传参时,第一个参数写对象时,相当于是方法模式
    3. 原函数有参数时,写为:方法.call(null,实参)
4.1 继承属性
		//1、父构造函数
        function Father(uname,age){
            //this指向父构造函数的对象实例
            this.uname = uname;
            this.age = age;
        }
        //2、子构造函数
        function Son(uname,age,sing){
            //this指向子构造函数的对象实例
            Father.call(this,uname,age);
            this.sing = sing
        }
        var son = new Son('zjl',35,'lalala');
        console.log(son);
4.2继承方法
		function Father(uname,age){
            this.uname = uname;
            this.age = age;
        }
        Father.prototype.money = function(){
            console.log(10000);
        }
        function Son(uname,age,score){
            Father.call(this,uname,age);
            this.score = score;
        }
        Son.prototype = new Father();
        Son.prototype.constructor = Son;
        Son.prototype.exam = function(){
            console.log('100');
        }
        var son = new Son('dd',35,100);
        console.log(son);
        console.log(Father.prototype);
        console.log(son.__proto__.constructor);

5.es5中数组的方法

  1. forEach,遍历,没有返回值
  2. filter,过滤,返回符合要求的新数组
  3. map,映射,返回新数组
  4. some,是否有满足条件的元素,返回布尔值
  5. every,是否全部满足条件,返回布尔值

6.es5中对象的方法

  1. Object.keys(),获取对象自身所有的属性,输出一个数组
  2. Object.defineProperty(目标对象,属性名,属性特征),定义新属性或修改原有的属性
6.1属性特性
  1. value,属性值,有则修改,无则添加
  2. writable,设置值是否可以修改,true或false,默认false不可以
  3. enumerable,设置属性是否可以被遍历,true或false,默认false不可以
  4. configurable,是否可以删除,是否可以再次被修改,true或false,默认false不可以
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值