摘要:前言面向对象编程是将需求抽象成一个对象,针对对象分析其特征属性和动作方法。面向对象编程思想其中一个特点就是封装,就是把需要的功能放在一个对象里。将闭包作为创建对象的构造函数。
前言
面向对象编程是将需求抽象成一个对象,针对对象分析其特征(属性)和动作(方法)。这个对象我们称之为类。面向对象编程思想其中一个特点就是封装,就是把需要的功能放在一个对象里。但是JavaScript这种解释性的弱类型语言没有经典强类型语言中通过关键字class来实现类的封装,JavaScript都是通过一些特性模仿实现的,这也让JavaScript有更高的灵活性。
封装为类添加属性和方法的两种方式
在函数(类)的内部通过this添加属性和方法
//创建类,通过this实现对类添加属性和方法 var Book = function (id, bookname, price) { this.id = id; this.bookname = bookname; this.price = price; }
通过在类的原型上添加属性和方法
1)为原型对象属性赋值
Book.prototype.display = function () { }
2)将一个对象赋值给类的原型对象
Book.prototype = { display :function () { } }
这样就将需要的方法和属性封装在抽象的Book类中,当使用功能方法时,不能直接使用Book类,而需要new关键字来实例化(创建)新的对象。
注意:通过this添加的属性和方法是在当前对象上添加的,而通过JavaScript是一种基于原型prototype的语言,所以每创建一个对象时,都有一个原型prototype用于指向其继承的属性、方法。这样通过prototype继承的方法并不是对象自身的。所以每次通过类创建一个新对象时,this指向的属性和方法都会得到相应的创建,但是通过prototype继承的属性和方法是每个对象通过prototype访问到,这些属性和方法不会再次创建。
通过this创建的属性是公有属性,通过this创建的方法是特权方法,在创建对象时调用特权方法可以看做是类的构造器。通过new关键字创建新对象时,由于类外面通过点语法添加的属性和方法没有执行到,所以新创建的对象中无法获取到,而prototype创建的属性或方法可以访问到,所以prototype对象中的属性和方法称为共有属性和方法。
如下:
var Book = function (id, name, price) { } Book.isChinese = true; Book.prototype = { isJsBook : false, display :function () {} } var b = new Book(11,"ava", 30); console.log(b.isJsBook); //false console.log(b.id); // 11 console.log(b.idChinese); //undefined console.log(Book.isChinese);// true闭包实现
闭包是有权访问另一个函数作用域中变量的函数,即在一个函数内部创建另一个函数。将闭包作为创建对象的构造函数。
//利用闭包实现 var Book =(function () { var bookNum = 0; function checkBook(name) {} function book(newId,newName,newPrice) { var name,price; function checkId() {} this.getName = function(){}; this.getPrice = function () {}; this.setName = function () {}; this.setPrice = function () {}; this.id = newId; this.copy = function () {}; bookNum++ if(bookNum>100){ throw new Error("100本书"); } this.setName(name); this.setName(price); } _book.prototype = { isJsBook :false, display:function () {} }; return _book; })();
由于在创建对象上这种写法容易忘记使用new而犯错误,所以可以使用安全模式创建对象,也就是在创建对象过程中用instanceof判断this是否是当前这个对象。
if(this instanceof Book){ ... }else{ return new Book() }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/97838.html
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...
摘要:在中,并没有对抽象类和接口的支持。例如,当对象需要对象的能力时,可以有选择地把对象的构造器的原型指向对象,从而达到继承的效果。本节内容为设计模式与开发实践第一章笔记。 动态类型语言 编程语言按数据类型大体可以分为两类:静态类型语言与动态类型语言。 静态类型语言在编译时已确定变量类型,动态类型语言的变量类型要到程序运行时,待变量被赋值后,才具有某种类型。 而JavaScript是一门典型...
摘要:面向对象面向对象的概述面向对象是什么面向对象编程的全称是,简称。面向对象编程是用抽象方式创建基于现实世界模型的一种编程。面向对象编程可以看做是使用一系列对象相互协作的软件设计。面向对象编程的山歌主要的特征是封装继承多态。 面向对象 面向对象的概述 面向对象是什么 面向对象编程的全称是Object Oriented Programming,简称OOP。面向对象编程是用抽象方式创建基于现实...
阅读 1702·2021-11-15 11:37
阅读 3013·2021-11-04 16:05
阅读 1893·2021-10-27 14:18
阅读 2721·2021-08-12 13:30
阅读 2424·2019-08-29 14:18
阅读 2055·2019-08-29 13:07
阅读 1978·2019-08-27 10:54
阅读 2692·2019-08-26 12:15