day27 原型对象

Argument

同this一样是函数的内置对象,它代表的是所有实参保存的位置

它是一个伪数组(只能访问元素及长度,但是不能使用其数组相关API)

     function fun() {

        console.log(arguments);

         for (let i = 0; i < arguments.length; i++) {

             console.log(arguments[i]);

         }

     }

fun(1, 2, 3, "heihei")//输出结果是遍历的实参

     function fun() {

         for (let i = 0; i < arguments.length; i++) {

             if (typeof arguments[i] == "boolean") {

                 console.log("执行布尔参数的代码");

             } else if (typeof arguments[i] == "number") {

                 console.log("执行数字参数的代码");

             } else if (typeof arguments[i] == "string") {

                 console.log("执行字符串参数的代码");

             }

         }

     }

     fun(123, true);//可以根据数据类型判断执行的代码

 

argument.callee

argument有个属性callee,该 属性等价于该函数对象本身

function fun(n) {

        let c;

        if (n == 1) {

            c = 10;

        } else {

            c = arguments.callee(n - 1) + 2;

        }

        return c;

    }

    console.log(fun(5));

 原型对象

prototype:原型对象

原型对象:保存着所有实例对象共享的属性或者方法

为什么需要原型对象

因为所有的方法应该是属性整个类族,而不是属性某个对象本身

    //如何为原型对象添加新的属性和方法

    Student.prototype.eat = function(food) {

        console.log(this.name + ":吃" + food);

    }

    Student.prototype.teacher = "大黄";

    let s = new Student("老王", 1, 100);

    s.eat("佛跳墙");

    let s1 = new Student("老绿", 2, 58);

    s1.eat("满汉全席");

    //如果实例化对象企图修改原型对象的数值

    //就等价于为自身添加了一个自定义属性

    s.teacher = "小白";

    //删除自定义属性teacher

    delete s.teacher;

    Student.prototype.teacher = "老黄";

    console.log(s.teacher, s1.teacher);

 原型图

实例化对象如何访问所有的属性(自身的属性和原型上的方法或者属性)

每个实例化对象都可以直接访问自己添加的自定义属性

每个实例化对象还有一个_proto_,_proto_指向该类的原型对象protptype

每个实例对象通过prototype去访问原型对象上的属性或者方法

apply()和call()

apply和call:作用都是修改this指向

可以对类和函数的关系进行解耦

被改变this指向的方法.call(this指向,参数1,参数2...);

被改变this指向的方法.apply(this指向,【参数1,参数2...】);

面试题

apply和call及bind的异同?

1.它们都是改变this指向的函数对象的方法

2.bind通常针对于匿名函数,apply和call针对有名函数

3.call和apply的参数不同,apply需要用数组包裹起来改变this的函数的参数

4.call和apply直接调用该函数,而bind知识生成一个新的函数对象,不会调用该函数

instanceof

typrof:检测内置基本类型,任何引用类型都会返回oject

instanceof 针对引用类型进行判断

对象 instance类型:判断对象是否是该类型,返回boolen

面试题

typeof和instanceof的作用

1.typeof用来检测基本类型(string,number,boolean),所有的引用类型都返回boject

2.instanceof用来检测引用类型的具体类型,返回布尔值

3.*instanceof*拥有类型兼容规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值