[口试专题]js之面向对象(OOP)

js之面向对象(OOP)

js对象范例(Object)

  1. js数据范例分六类,简朴范例:Undefined,Null,Bollean,Number,String五种,庞杂范例:Object.
    个中Undefined、Null、Boolean、Number也属于基础范例。Object、Array和Function则属于援用范例

  2. 个中Null范例示意一个空对象援用,typeof (null范例)会返回object

  3. 简朴范例和庞杂范例之间的关联: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);
    原文作者:逺方小鎭
    原文地址: https://segmentfault.com/a/1190000008549062
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞