美文网首页重点js
js设计模式(二)对象继承

js设计模式(二)对象继承

作者: 该昵称注册中 | 来源:发表于2017-11-29 23:19 被阅读0次

创建对象的安全模式

在调用类对象时,很容易忘记使用new而犯错误,需要使用检测来监控

var Book = function(title,time){
  this.title = title;
  this.time = time;
}
var book = Book("peter","2001"); //undefined this指向的是window window.title=peter
//安全模式
var Book = function(title,time){
  if(this instanceof Book){
     this.title = title;
     this.time = time;
  }else{
     return new Book(title,time);
  }
}
var book = Book("peter2","2002");  // book.title = peter2

继承模式

类式继承
//声明父类
function SuperClass(){ 
  this.superValue = true,
  this.arr = ['js','java']
}
//父类公有方法
SuperClass.prototype.getSuperValue = function(){
   return this.superValue;
}
//声明子类
funciton SubClass(){ this.subClass = false}
//继承父类 注意这里是把父类实例对象给子类原型
SubClass.prototype = new SupClass();
//子类共有方法 
SubClass.prototype.getSubValue = funciton(){return this.subClass}
var subClass = new SubClass()
subClass.getSuperValue() // true
subClass.getSubValue()  //false
缺点1:由于SubClass.prototype = new SupClass();
所有的子类都是继通过原型prototype对父类实例化,继承了父类.父类中的共有属性要是引用类型,
就会被子类中所有的实例共用,因此一个子类的实例更改子类原型从
父类构造函数中继承来的公有属性就会直接影响到其他的子类。
例: var sub1 = new SubClass(); 
    console.log(sub1.arr) //js,java 
    sub1.arr.pusn("ios");
    var sub2 = new SubClass();
    console.log(sub2.arr) //js,java,ios 
缺点2:通过prototype对父类的实例化,在创建父类的,无法向父类传递参数,
    因此在实例化父类的时候也无法对父类构造函数内的属性进行初始化

创建即继承----构造函数继承

//声明父类
function SuperClass(id){
    //引用类型共有属性
    this.books = ['javaScript','html'];
    //值类型共有属性
    this.id = id;
}
//父类声明原型方法
SuperClass.prototype.showBooks = function(){
   this.console(this.books);
}
//声明子类 
function SubClass(id){
  //继承父类 call也被称为改变上下文环境
  SuperClass.call(this,id)
}
SubClass.prototype.sayHi = function(){
    console.log(this.id);
}
var sub1 = new SubClass(10);
var sub2 = new SubClass(20);
console.log(sub1.books) // ['javaScript','html'];
sub1.books.push('css') 
console.log(sub1.books) // ['javaScript','html','css'];
console.log(sub2.books) // ['javaScript','html'];
*** sub2.showBooks() //TypeError  并没有实例化SuperClass 没有继承它prototype的属性
*** sub2.sayHi() //20
//https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call

组合继承---结合二者优点

//声明父类
function SuperClass(id){
    //引用类型共有属性
    this.books = ['javaScript','html'];
    //值类型共有属性
    this.id = id;
}
//父类声明原型方法
SuperClass.prototype.showBooks = function(){
   this.console(this.books);
}
//声明子类 
function SubClass = function(id,time){
  //继承父类 call也被称为改变上下文环境
  SuperClass.call(this,id);
  this.time = time;
}
//继承父类 注意这里是把父类实例对象给子类原型
SubClass.prototype = new SupClass();
//子类原型方法
SubClass.prototype.getTime = function(){
  console.log(this.time)
}

相关文章

  • js设计模式(二)对象继承

    创建对象的安全模式 在调用类对象时,很容易忘记使用new而犯错误,需要使用检测来监控 继承模式 类式继承 创建即继...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 《JS设计模式》读书笔记(一)

    标签:JS 设计模式 《JS设计模式》读书笔记(二) 《JS设计模式》读书笔记(三) 《JS设计模式》读书笔记(四...

  • 《JS设计模式》读书笔记(六)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(三)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(四)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 《JS设计模式》读书笔记(五)

    标签:JS 设计模式 读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设计模...

  • 实习第七十四天(设计模式)

    参考 《JS设计模式》读书笔记(二) 《JS设计模式》读书笔记(三) 《JS设计模式》读书笔记(四) 《JS设计模...

  • 《JS设计模式》读书笔记(七-完结)

    标签:JS 设计模式 其他读书笔记链接: 《JS设计模式》读书笔记(一) 《JS设计模式》读书笔记(二) 《JS设...

  • 要点1 Java相关

    1. 熟练掌握Java技术,熟悉面向对象思想,熟悉常用设计模式; 面向对象思想: 继承, 封装, 多态 设计模式:...

网友评论

    本文标题:js设计模式(二)对象继承

    本文链接:https://www.haomeiwen.com/subject/dnlmbxtx.html