前言
面向对象编程是将需求抽象成一个对象,针对对象分析其特征(属性)和动作(方法)。这个对象我们称之为类。面向对象编程思想其中一个特点就是封装,就是把需要的功能放在一个对象里。但是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 () { } }
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://bianchenghao.cn/bian-cheng-ji-chu/92203.html