修改this指向的方法:
1.call();|| 参数——call(obj1,需要传的参数-可以包括n个值)
var obj = {
name:'张三'
age:18,
height:180,
hobby:function(a){
console.log(this.name+'爱'+a)}
obj.hobby('游泳')
var obj1 ={name:'李四'}
obj.hobby.call(obj1,'游泳')//将hobby函数的this指向改变成了obj1
2.apply()——参数:apply(obj1,[ ]) //第二个参数必须是数组的形式
var objCar = {
name:'宝马',
meony:'150万',
run:function(par){
console.log(this.name + '在以1000米每秒的速度跑'+par)}}
var objCar1 ={
name:'奔驰'
}
objCar.run('你行么?')
objCar.run.apply(objCar1,['你行么?'])
//apply 也是吧objCar的this指向改变成了objCar1 中
3.bind(obj1)——bind方法会立即改变this指向,但是他不会
立即执行,他是等我们调用的时候在传参执行。
var fruit = {
name:'苹果',
eat:function(v){
console.log(this.name+v)
}}
var fruit1 ={
name:'菠萝',
}
fruit.eat('好吃')
var mm =fruit.eat.bind(fruit1)
mm('不好吃')
// === fruit.eat.bind(fruit1)('不好吃')
原型链:分两条线,一条继承,一条构造。
继承:就是说继承把他实例化出来的‘创造者’(虚)上的prototype
上的属性或者方法,找不到再上父级的父级上的prototype上去找
找到Object.prototype上为止。
eg:arr——Array.prototype——Object.prototype;
构造:就是期初来源于Function,他 构造出了例如(Number Boolean..)
等基本类型的值;而这些值可以访问Function.prototype上的属性和方法
也只有他们可以访问这些值和方法:
注意:被基础类型值构造出来的对象没有prototype;
constructor :找的是构造他的父级的原型链上的一个构造他的方法:
__proto__: 找的是构造他的父级的原型链上的一整条链到Object.prototype.