//具体如下:
//方法一:原型继承:–>导致的||《问题》||:每次创建的实列,都会拥有共同的属性、属性值和方法
//一、创造飞机模板
function Plane(src,x,y,bl) {
this.src=src;
this.x = x;
this.y = y;
this.speed;
this.blood = bl;
this.move = function () {
console.log(‘飞机下移动’)
};
this.init = function () {
console.log(‘飞机初始化’)
};
}
//二、创建玩家飞机模板
function palyerPlane() {
//(一)这里需要去继承飞机模板的属性和方法----------->这就是继承
//(二)自己的属性和方法
}
palyerPlane.prototype=new Plane(’./img’,10,10,20);
let palyerPlane1=new palyerPlane();
console.log(palyerPlane1);//------------>打印出来的palyerPlane1就拥有了Plane的属性和方法
//方法二:call方法
//这两个都是函数的方法:函数名.call()和函数名.apply()
function Plane1(src,x,y,bl) {
this.src=src;
this.x = x;
this.y = y;
this.speed;
this.blood = bl;
this.move = function () {
console.log('飞机模板移动')
};
this.init = function () {
console.log('飞机初始化')
};
}
//二、创建玩家飞机模板
function palyerPlane2(src,x,y,bl) {
//(一)这里需要去继承飞机模板的属性和方法----------->这就是继承
console.log(this);//这里的this指向palyerPlane2构造函数的实例化对象。call方法实现的原理就是改变Plane1这个构造函数的this指向
Plane1.call(this,src,x,y,bl)//******这行代码的意思是:将玩家飞机的实例化对象发送给Plane飞机模板
// ()里面第一个参数是this,后面可接无数个参数
//(二)自己的属性和方法
this.move=function () {
console.log('玩家飞机移动方法')
}
}
let palyerPlane3=new palyerPlane2('./img',10,20,20);
console.log(palyerPlane3);//------------>打印出来的palyerPlane1就拥有了Plane的属性和方法
//例如:
let obj={name:'李白'};
let fun=function () {
console.log(this)
};
fun();//----------->这里执行函数,打印指向window
fun.call(obj)//----------->这里执行函数,打印指向obj对象
//=============方法三:apply方法
//apply方法和call方法几乎没有区别,唯一区别在于:53行。
// Plane1.apply(this,arr)只有两个参数,arr[0]就代表上面的src属性,依次后延
//Plane1.apply(this,arguments)---->这样写
//例如:
let obj1={
name:'李白',
eat(a){
console.log(this)
}
}
obj1.eat.apply();//什么都不填。就是相当于填了undefined。----->指向window
obj1.eat.apply(1);//传了数字1------>指向1
//总结就是:传什么指向什么
# //一、创造飞机模板
function Plane(src,x,y,bl) {
this.src=src;
this.x = x;
this.y = y;
this.speed;
this.blood = bl;
this.move = function () {
console.log('飞机下移动')
};
this.init = function () {
console.log('飞机初始化')
};
}