理解javascript面向对象的基本模式

简介:

理解面向对象的基本模式 
一般情况下 我们的创建对象的方式如下:
var person = {};
person.name = "tugenhua";
person.age = 24;
person.sayName = function(){alert(this.name);}
person.sayName();//调用方法

但是使用这个传统的模式  会有个明显的缺点 使用同一个接口创建很多对象 会产生很多重复的代码;所以我们就引来工厂模式来解决这个问题
工厂模式在很多动态语言中是创建类 但是在ECMAScript中是无法创建类的 所以程序员就开发出函数 比如工厂模式函数如下:
function person(name,age,job){
 var o = {};//创建一个对象
 o.name = name;
 o.age = age;
 o.job = job;
 o.sayName = function(){alert(this.name);}
 return o; 
}
var person1 = person("tu",24,"IT");
var person2 = person("genhua",24,"II");
person1.sayName();//tu
person.sayName()//genhua;
这上面的函数是工厂模式的基本形式 虽然工厂模式解决了多个相似的对象问题 但是未解决的是对象识别的问题(怎样知道一个对象的类型),即变量person1和变量person2调用函数person时候 返回的都是对象o. 之后我们引入构造函数来解决多个对象的识别问题 下面是构造函数的基本形式。
function Person(name,age,job){
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayName = new function(){
  alert(this.name); 
 } 
}
 var person1 = new Person("tugenhua",24,"IT"),
  person2= new Person("tutu",24,"IT");
 person1.sayName();//tugenhua
 person2.sayName();//tutu;
恩 上面的是构造函数模式 构造函数模式与工厂模式相比较 1 没有明显的创建对象 2 没有返回值 3 直接将属性和方法赋值给了this对象  优点是:创建自定义构造函数将来可以将它的实例标定为一种特定
的类型 这也是说明的了 构造函数模式胜过工厂模式 但是构造函数模式虽然很好 但是还是有缺点 每个方法都要在每个实例中创建一遍,上面的两个实例的方法并不是一样的 person1.sayName == person2.sayName;//返回是false;但是上面的代码我们可以改造下 因为我们想要两个实例的函数一样 那么我们可以把上面的sayName这个方法当作全局变量来申明,那么这两个就是引用的是同个函数了!虽然可以让不同的实例来调用同个函数 但是问题又来了 在全局作用域定于的函数实际上只能被某个对象调用。更让人无法接受的是 如果对象需要定于很多方法 那么就要定于多个全局函数 那么就缺乏封装性 这是个问题 所以我们下面可以引用javascript原型来解决上面的问题!原型就是可以让所有对象实例共享他们的属性和方法!
理解原型:
无论什么时候 只要创建了一个新函数 该函数就会产生一个原型属性对应 那么所有的原型prototype属性都会自动获得一个构造函数属性 当调用一个构造函数新实例后 该实例内部会有个指针指向该原型属性 我们要明白最重要的一点是 链接是存在于实例与构造函数原型属性之间 而并非与构造函数之间 该原型模式基本形式如下
function Person(){}
Person.prototype = {
 name : "tugenhua",
 age : 24,
 job : "IT",
 sayName : function(){alert(this.name);} 
}
var person1 = new Person();
var person2 = new Person();










本文转自 涂根华 51CTO博客,原文链接:http://blog.51cto.com/tugenhua/745057,如需转载请自行联系原作者
目录
相关文章
|
存储 安全 JavaScript
云计算浪潮中的网络安全之舵探索Node.js中的异步编程模式
【8月更文挑战第27天】在数字化时代的风帆下,云计算如同一片广阔的海洋,承载着企业与个人的数据梦想。然而,这片海洋并非总是风平浪静。随着网络攻击的波涛汹涌,如何确保航行的安全成为了每一个船员必须面对的挑战。本文将探索云计算环境下的网络安全策略,从云服务的本质出发,深入信息安全的核心,揭示如何在云海中找到安全的灯塔。
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
1595 44
Next.js 实战 (三):优雅的实现暗黑主题模式
这篇文章介绍了在Next.js中实现暗黑模式的具体步骤。首先,需要安装next-themes库。然后,在/components/ThemeProvider/index.tsx文件中新增ThemeProvider组件,并在/app/layout.tsx文件中注入该组件。如果想要加入过渡动画,可以修改代码实现主题切换时的动画效果。最后,需要在需要的位置引入ThemeModeButton组件,实现暗黑模式的切换。
583 0
Next.js 实战 (三):优雅的实现暗黑主题模式
|
前端开发 JavaScript UED
探索JavaScript的异步编程模式
【10月更文挑战第40天】在JavaScript的世界里,异步编程是一道不可或缺的风景线。它允许我们在等待慢速操作(如网络请求)完成时继续执行其他任务,极大地提高了程序的性能和用户体验。本文将深入浅出地探讨Promise、async/await等异步编程技术,通过生动的比喻和实际代码示例,带你领略JavaScript异步编程的魅力所在。
198 1
|
前端开发 JavaScript UED
探索JavaScript中的异步编程模式
【10月更文挑战第21天】在数字时代的浪潮中,JavaScript作为一门动态的、解释型的编程语言,以其卓越的灵活性和强大的功能在Web开发领域扮演着举足轻重的角色。本篇文章旨在深入探讨JavaScript中的异步编程模式,揭示其背后的原理和实践方法。通过分析回调函数、Promise对象以及async/await语法糖等关键技术点,我们将一同揭开JavaScript异步编程的神秘面纱,领略其带来的非阻塞I/O操作的魅力。让我们跟随代码的步伐,开启一场关于时间、性能与用户体验的奇妙之旅。
|
JavaScript 前端开发 调度
探索Node.js中的异步编程模式
在Node.js的世界里,异步编程是核心。本文将带你深入了解异步编程的精髓,通过代码示例和实际案例分析,我们将一起掌握事件循环、回调函数、Promises以及async/await等关键概念。准备好迎接挑战,让你的Node.js应用飞起来!
248 6
|
JavaScript 前端开发 开发者
探索Node.js中的异步编程模式
【9月更文挑战第33天】在JavaScript的后端领域,Node.js凭借其非阻塞I/O和事件驱动的特性,成为高性能应用的首选平台。本文将深入浅出地探讨Node.js中异步编程的核心概念、Promise对象、Async/Await语法以及它们如何优化后端开发的效率和性能。
242 7
|
JavaScript 前端开发 API
探索Node.js中的异步编程模式
【10月更文挑战第4天】在JavaScript的世界中,异步编程是提升应用性能和用户体验的关键。本文将深入探讨Node.js中异步编程的几种模式,包括回调函数、Promises、async/await,并分享如何有效利用这些模式来构建高性能的后端服务。
160 2
|
JavaScript 前端开发 开发者
探索Node.js中的异步编程模式
【9月更文挑战第15天】在Node.js的世界中,“一切皆异步”不仅是一句口号,更是其设计哲学的核心。本文将带你深入理解Node.js中异步编程的几种主要模式,包括经典的回调函数、强大的Promise对象、以及简洁的async/await结构。我们将通过实例代码来展示每种模式的使用方式和优缺点,帮助你更好地掌握Node.js异步编程的精髓。无论你是Node.js新手还是有一定经验的开发者,这篇文章都能给你带来新的启示和思考。让我们一起开启Node.js异步编程的探索之旅吧!
|
设计模式 JavaScript 前端开发
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略
JavaScript的继承机制基于原型链,它定义了对象属性和方法的查找规则。每个对象都有一个原型,通过原型链,对象能访问到构造函数原型上的方法。例如`Animal.prototype`上的`speak`方法可被`Animal`实例访问。原型链的尽头是`Object.prototype`,其`[[Prototype]]`为`null`。继承方式包括原型链继承(通过`Object.create`)、构造函数继承(使用`call`或`apply`)和组合继承(结合两者)。ES6的`class`语法是语法糖,但底层仍基于原型。继承选择应根据需求,理解原型链原理对JavaScript面向对象编程至关重要
509 7
【JavaScript】深入浅出JavaScript继承机制:解密原型、原型链与面向对象实战攻略

热门文章

最新文章