js之面向对象(OOP)
js对象范例(Object)
js数据范例分六类,简朴范例:Undefined,Null,Bollean,Number,String五种,庞杂范例:Object.
个中Undefined、Null、Boolean、Number也属于基础范例。Object、Array和Function则属于援用范例个中Null范例示意一个空对象援用,typeof (null范例)会返回object
简朴范例和庞杂范例之间的关联:js中一切皆对象,所以以上简朴范例也是对象,然则建立要领差别,运用typeof 检测范例时效果也差别.(这个typeof真是没啥用).比方下例中两个,然则本质上都是对象.
var name = String("jwy");
alert(typeof name);//"object"
var author = "Tom";
alert(typeof author);//"string"
清点JS面向对象之继续
原型链
即运用原型链让一个援用范例继续另一个运用范例的要领和属性.
瑕玷:
重写了原有的prototype,constructor指向了超类.
prototype是超类的实例,因而超类属性会被一切子类实例同享.
建立子类实例时,不能向超类组织函数传参.
function Subtype(){
//组织函数
}
Subtype.prototype = new Supertype();
借用组织函数(典范继续)
即在子类组织函数中挪用超类组织函数,经由历程call或许apply来绑定上下文对象.
function Subtype(){
Supertype.call(this);//也可传参
}
瑕玷:
和组织函数形式一样,要领在组织函数中定义,因而就没法完成函数复用(作为要领)
在超范例的原型中定义的要领,对子范例而言也是不可见的
组合继续(伪典范继续)
即原型链+典范继续,运用原型链继续原型属性和要领,运用借用组织函数继续实例属性
function SuperType (name) {
this.name = name;
this.color = ['red'];
}
SuperType.prototype.sayName = function () {
console.log(this.name)
}
function SubType (name,age) {
SuperType.call(this,name)
this.age = age;
}
SubType.prototype = new SuperType();
SubType.constructor = SubType;
SubType.prototype.sayAge = function () {
console.log(this.age)
}
var subInstance = new SuperType('zchang',11);
var subInstance1 = new SuperType('zc',18);
寄生式继续
即建立一个仅用于封装继续历程的函数,该函数在内部以某种体式格局来加强对象,末了返回该对象.
function createAnother (origin) {
var clone = objects(origin);//某个函数建立新对象
clone.sayHi = function () {
console.log('hi')
}
return clone;
}
组合寄生式继续
function SuperType(name) {
this.name = name;
this.color = ['red'];
}
SuperType.prototype.sayName = function() {
console.log(this.name)
}
function SubType(name, age) {
SuperType.call(this, name)
this.age = age;
}
// SubType.prototype = new SuperType();
function inheritPrototype(subtype, supertype) {
var prototype = object(supertype);
prototype.constructor = subtype;
subtype.prototype = prototy
}
inheritPrototype(SubType, SuperType);
SubType.prototype.constructor = SubType;
SubType.prototype.sayAge = function() {
console.log(this.age)
}
var subInstance = new SuperType('zchang', 11);
var subInstance1 = new SuperType('zc', 18);