JS 对象关联设计模式 比 面向对象设计更优秀

原创 2015年11月19日 23:24:06

近看了《你不知道的JavaScript》感触很深呀,特别是其中的面向委托设计的概念,简直是给我打开了新世界的大门呀,和大家分享一下吧。


要求:

有个People对象,要求有属性name和age,sayYourself方法打印这两个变量。

有个Student对象,要求有属性grade,sayGrade方法打印这两个变量。


先说说面向对象设计:强调实体与实体之间的关系

一般会用原型继承的思想。代码如下:

/*
* 面向对象设计模式
* 原型继承
* student 继承 People
*/
function People (age,name) {
  this.age = age;
  this.name = name;
}
// 继承方法 sayYourSelf
People.prototype.sayYourSelf = function(){
  console.log("Your name:"+this.name+ "; Your age" + this.age);
}

function Student(age,name,grade){
  //改变people 里的值
  People.call(this,age,name);
  this.grade = grade;
  this.sayGrade = function(){
    console.log("Your grade:"+this.grade);
  }
}

// 创建 People 和 Student 之间的关联
Student.prototype = Object.create(People.prototype);

var human = new People(15,"Joy");
human.sayYourSelf();//
var studentA = new Student(23,"Cindy","Junior");
studentA.sayYourSelf();//



这样的代码看似解决了继承的问题,但是却十分的繁琐,下面就是我推荐的面向委托,及对象关联的设计模式。


强烈推荐!!!!

对象关联的设计模式只关注对象之间的关联关系

/*
* 对象关联设计模式   ---- 对象与对象之间的关联关系
*
* student 继承 People
*/
var Person = {
  sayYourSelf: function(){
    console.log("Your name:"+this.name+ "; Your age" + this.age);
  },
  init:function(name,age){
    this.name = name;
    this.age = age;
  }
};
//创建Student对象关联People
var Student = Object.create(Person);
//定义Student内部方法
Student.sayGrade = function(){
  console.log("Your grade:"+this.grade);
}
Student.setGrade = function(grade){
  this.grade = grade;
}

// 创建 和 初始化 分为两个步骤
var humanA = Object.create(Person);
humanA.init("Tom",23);

var studentB = Object.create(Student);
studentB.setGrade("Junior");


对比一下两个代码,优势就比较明显了。


优势:

1.让代码看起来更简洁。

2.避免了丑陋的显式的伪多态的调用(People.call),改为相对简单的委托调用(studentB.init)。

3.代码更加容易理解。

4.对象关联可以更好的支持关注分离原则(separation of concerns),创建和初始化并不需要合并为一个步骤。



总之今天就分享到这里啦~嘻嘻~晚安~

Java面向对象设计模式

设计模式(Design Patterns)                                   ——可复用面向对象软件的基础       设计模式(Design pattern)是...
  • u011814346
  • u011814346
  • 2017年05月02日 14:17
  • 675

面向对象之设计模式

面向对象之设计模式前言 要想推开架构师的那扇大门,就离不开设计模式这把钥匙。对设计模式的理解与精通,是通往架构师之路的第一步 在任何面向对象语言的开发过程以及个人职业技能成长的道路中,新手与新手或者新...
  • u013263917
  • u013263917
  • 2016年11月22日 23:15
  • 745

数据库的一种完全面向对象设计模式

1.1 完全面向对象和非完全面向对象     面向对象(OO)方法这个名字早已深入人心,它的科学性和合理性也已毋庸置疑。人们动辄将自己开发的软件冠以“采用面向对象方法设计”以示其先进性就是一个极好的证...
  • lee576
  • lee576
  • 2007年09月25日 22:09
  • 1897

面向对象(模板设计模式)

/* 需求:获取一段程序运行的时间 原理:获取程序开始和结束时的时间然后相减 方法:System.currentTimeMillis() 模板方法设计模式: 在定义功能时,功能的一部...
  • u012369373
  • u012369373
  • 2015年11月08日 15:37
  • 287

面向对象设计思想与常见设计模式小结

面向对象思想设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 设计模式的分类 简单工厂模式 简单工厂模式概述 工厂方法模式 工厂方法模式概述 单例设计模式 单例设...
  • lutianfeiml
  • lutianfeiml
  • 2016年09月05日 16:55
  • 1525

datagrid和datalist大比拼

转自:http://jackyhawk.blog.hexun.com/260485_d.htmlWEB开发自从有了基于脚本的WEB编程技术(如ASP)以来,经历了一个漫长的过程。通过使用微软的ASP....
  • zdyguilong
  • zdyguilong
  • 2007年04月12日 09:37
  • 1020

12种优秀JavaScript MVC框架之比较

Gordon L. Hempton是西雅图的一位黑客和设计师,他花费了几个月的时间研究和比较了12种流行的JavaScript MVC框架,并在博客中总结了每种框架的优缺点,最终的结果是,Ember....
  • mysouling
  • mysouling
  • 2016年04月21日 17:22
  • 848

面向对象的设计模式(九),适配器模式

记得刚学Java SE的AWT(新版Swing)编程的时候,那个时候自己特别兴奋,因为学了那么久的Java了,没看到一点实在点的东西,觉得很没有成就感。后来学到Swing的时候,用它编写图形化界面,于...
  • ydxlt
  • ydxlt
  • 2016年01月03日 14:38
  • 13163

设计模式-面向对象设计核心

设计模式之开放封闭原则
  • Nash_Cyk
  • Nash_Cyk
  • 2017年12月06日 19:52
  • 96

js对象或类的方法设计模式解读

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象。 ECMAScript 拥有很多创建对象或类的方法。 工厂方式 原始的方式 因为...
  • basycia
  • basycia
  • 2016年01月06日 15:31
  • 240
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JS 对象关联设计模式 比 面向对象设计更优秀
举报原因:
原因补充:

(最多只允许输入30个字)