this的指向

2019-06-23  本文已影响0人  于默k

函数中的this是在运行时候决定的,而不是函数定义时
全局环境中的this指window
其他函数中的this指向调用它的对象
使用call和apply改变函数中this的具体指向
apply的参数需要放在一个数组里面
bind改变this指向

fn.bind(o)

2改变this指向的方法
callapply方法的使用

函数体.call(obj)
obj1={
fn:function(){

}
}
obj2 = {
fn:function(){

}
}
obj1.fn.call(obj2,,,,,,)call方法传参只需要使用多个逗号隔开

apply方法需要将参数放在一个数组里
以上两个方法改变函数的this指向并立即调用该函数

bind在使用形式上合上面两个call和apply一样
只不过不立即调用,经常在定时器,或其他回调函数等不立即调用的函数改变this指向时使用

setTimeout(function(){}.bind(obj),1000)

该匿名函数在1000毫秒后调用,使用bind改变this指向又不立即调用,符合该使用场景

2.1 apply()方法的应用
参数需要传入一个数组

var obj1 = {
                name:'zhangsan',
                returName:function(){
                    return this.name;
                }
            }
            var obj2 = {
                name:'lisimao',
                returName:function(str){
                    return this.name+str;
                }
            }
            console.log(obj2.returName.apply(obj1,['666']))

2.2 call()方法的应用()
call方法和apply使用方法一致,只不过参数是直接传,不用数组盛放
3原型模式(掌握)
一个实例或者构造函数访问它的原型的方法

obj.__proto__
Person.prototype

3.1原型模式创建对象语法(掌握)

function Person(name,age){
                this.name = name;
                this.age = age;
                this.add =function(x,y){
                    return this.age+x+y;
                };
            }
            Person.prototype.add = function(x,y){
                return this.age+x+y;
            }

在构造函数中添加某个属性,与在构造函数的原型上添加某个属性是一样的效果
只不过某些构造函数不对我们开放,而还想改变该构造函数生产出来的所有实例的属性,那就只能通过构造函数的原型来改变
3.2理解原型对象(掌握)
在js中所有的实例都有原型,原型也有原型,形成一条链条,就叫原型链,这条链条的起点是null
继承:从实例开始往原型链而上,所有的祖辈拥有的属性,该实例都可调用。
4掌握组合使用构造函数模式和原型模式(了解)
5原型链prototype obj.__proto__.... Persion.prpototype.__proto__.....
5.1实现原型链的基本模式(了解)
5.2默认的原型(掌握)
继承(近端对象可以使用远端祖辈身上的属性) 覆盖(链近端的同名属性会覆盖链远端的同名属性) 多态 (龙生九子,个个不同,但都是龙子)

function Person1(){
                this.add=function(){
                    return 'wo shi zhang san'
                }
            }
            Object.prototype.add = function(){
                return '666'
            }
            var obj1 = {name:1}
            obj1.__proto__ = new Person1();
            obj1.add = function(){
                return '我最近'
            }

6借用构造函数的问题

寄生

function Person1(){
                var obj = new Object();
                obj.add=function(){
                    return 'wo shi zhang san'
                }
                return obj;
            }
            var lizi = new Person1();
            console.log(lizi)

6.1什么是构造函数(掌握)

可同过new关键字调用 实例化一个对象的函数 一般将其首字母大写以和其他函数相区分
new 关键字的作用
新生成一个空白对象 改变this指向新创建出来的对象
6.2传递参数(了解)

7.掌握至少一种继承,了解其他继承方式及优缺点

(1)通过构造函数继承
(2)默认继承Object中的
(3)通过原型继承
上一篇下一篇

猜你喜欢

热点阅读