this的指向
函数中的this是在运行时候决定的,而不是函数定义时
全局环境中的this指window
其他函数中的this指向调用它的对象
使用call和apply改变函数中this的具体指向
apply的参数需要放在一个数组里面
bind改变this指向
fn.bind(o)
2改变this指向的方法
call
和apply
方法的使用
函数体.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)通过原型继承