那对继承,我是这么看的。咱们这个继承一般是针对父方法和子方法来说的,也就是说有两个方法,一个父方法,一个子方法。子方法可以拥有父方法的所有属性以及函数,那对于我们来说,js中常用的继承有3种。
第一种原型链继承:子对象他有一个默认属性是叫__proto__,他是指向这个方法本身,而方法本身他是不带父对象的方法或者属性的,所以他得调用他的prototype 的属性,这个prototype属性他又指向一个对象, 对象是子方法的原型,那么这个原型他又是用父方法实例化出来的,所以他又是他父对象的__proto__,这个__proto__又指向的父对象本身内个prototype,这个prototype 又调用他里面的 属性和方法,这样的话就是他的原型链继承。
例如:
function Parent(){
this.name = 'mike';
}
function Child(){
this.age = 12;
}
Child.prototype = new Parent();//Child继承Parent,通过原型,形成链条
obj.prototype == 对象.__proto__
var p = new per();
alert(p.__proto__==per.prototype) //true
per.prototype.__proto__
第二个叫构造函数继承, 构造函数继承最重要的一点就是冒充,父对象定义在子对象
里面,在子对象里面可以引用父对象的属性和方法,构造函数继承我感觉比较简单。
列如:
function myFun(){
this.name=
this.age=
this.show = function(){}
}
var obj1 = new myFun();
var obj2 new myFun();
再往后就是混合继承,那就是既有构造,又有原型,这样的一种继承方式。
例如:
function myFun(){
this.name
this.show=function(){alert(123)}
}
myFun.prototype.age=12
myFun.prototype.info = function(){alert(456)}
myFun.prototype={
name:"zhangsan",
age :18,
show:function(){}
}
这就是我对继承看法。
(call和apply之间的区别:两种方法虽然都是继承属性,但书写格式存在不同
这里call方法是通过this 后跟着一个字符串系列
而apply方法同样也是通过this 不过传属性则是由数组构成
)
call(this,name,age,str,demo) 字符串序列
apply(this,[name,age]) 数组
---恢复内容结束---
---恢复内容开始---
那对继承,我是这么看的。咱们这个继承一般是针对父方法和子方法来说的,也就是说有两个方法,一个父方法,一个子方法。子方法可以拥有父方法的所有属性以及函数,那对于我们来说,js中常用的继承有3种。
第一种原型链继承:子对象他有一个默认属性是叫__proto__,他是指向这个方法本身,而方法本身他是不带父对象的方法或者属性的,所以他得调用他的prototype 的属性,这个prototype属性他又指向一个对象, 对象是子方法的原型,那么这个原型他又是用父方法实例化出来的,所以他又是他父对象的__proto__,这个__proto__又指向的父对象本身内个prototype,这个prototype 又调用他里面的 属性和方法,这样的话就是他的原型链继承。
例如:
function Parent(){
this.name = 'mike';
}
function Child(){
this.age = 12;
}
Child.prototype = new Parent();//Child继承Parent,通过原型,形成链条
obj.prototype == 对象.__proto__
var p = new per();
alert(p.__proto__==per.prototype) //true
per.prototype.__proto__
第二个叫构造函数继承, 构造函数继承最重要的一点就是冒充,父对象定义在子对象
里面,在子对象里面可以引用父对象的属性和方法,构造函数继承我感觉比较简单。
列如:
function myFun(){
this.name=
this.age=
this.show = function(){}
}
var obj1 = new myFun();
var obj2 new myFun();
再往后就是混合继承,那就是既有构造,又有原型,这样的一种继承方式。
例如:
function myFun(){
this.name
this.show=function(){alert(123)}
}
myFun.prototype.age=12
myFun.prototype.info = function(){alert(456)}
myFun.prototype={
name:"zhangsan",
age :18,
show:function(){}
}
这就是我对继承看法。
(call和apply之间的区别:两种方法虽然都是继承属性,但书写格式存在不同
这里call方法是通过this 后跟着一个字符串系列
而apply方法同样也是通过this 不过传属性则是由数组构成
)
call(this,name,age,str,demo) 字符串序列
apply(this,[name,age]) 数组