方法一: 构造函数法
- function Cat(){this.name = "";}
- Cat.prototype.showName = function(){
- console.log(this.name);
- }
- var cat = new Cat();
- cat.name = "Tom";
- cat.showName();// Tom
它用构造函数模拟 "类", 在其内部用 this 关键字指代实例对象.
类的属性和方法, 还可以定义在构造函数的 prototype 对象之上.
生成实例的时候, 使用 new 关键字.
方法二: Object.create() 法
- var Cat = {
- name:"",
- showName:function(){
- console.log(this.name);
- }
- };
- var cat = Object.create(Cat);
- cat.name = "Tom";
- cat.showName();// Tom
用这个方法,"类" 就是一个对象, 不是函数.
然后, 直接用 Object.create() 生成实例, 不需要用到 new.
方法三: 极简主义法
1 类的定义
- var Cat = {
- createNew:function(){
- var cat = {};
- cat.name = "";
- cat.showName = function(){
- console.log(this.name);
- }
- return cat;
- }
- };
- var cat = Cat.createNew();
- cat.name = "Tom";
- cat.showName();// Tom
2 继承
- var Animal = {
- createNew:function(){
- var animal = {};
- animal.name = "";
- animal.sleep = function(){
- console.log("ZZzz...");
- }
- return animal;
- }
- };
- var Cat = {
- createNew:function(){
- var cat = Animal.createNew();
- cat.name = "Cat";
- cat.showName = function(){
- console.log(this.name);
- }
- return cat;
- }
- };
- var cat = Cat.createNew();
- cat.name = "Tom";
- cat.showName();// Tom
- cat.sleep();// ZZzz...
让一个类继承另一个类, 实现起来很方便. 只要在前者的 createNew() 方法中, 调用后者的 createNew() 方法即可.
3 私有成员
- var Cat = {
- createNew:function(){
- var cat = {};
- var name = "Tom";// 私有
- cat.showName = function(){
- console.log(name);
- }
- return cat;
- }
- };
- var cat = Cat.createNew();
- cat.showName();// Tom
在 createNew() 方法中, 只要不是定义在 cat 对象上的方法和属性, 都是私有的.
4 类属性
- var Cat = {
- className:"Cat",
- createNew:function(){
- var cat = {};
- cat.name = "";// 私有
- cat.showName = function(){
- console.log(cat.name);
- }
- cat.showClass = function(){
- console.log(Cat.className);
- }
- return cat;
- }
- };
- var cat1 = Cat.createNew();
- cat1.name = "Tom";
- cat1.showName();
- cat1.showClass();
- var cat2 = Cat.createNew();
- cat2.name = "Jim";
- cat2.showName();
- cat2.showClass();
有时候, 我们需要所有实例对象, 能够读写同一项内部数据.
这个时候, 只要把这个内部数据, 封装在类对象的里面即 createNew() 方法的外面即可.
来源: http://www.bubuko.com/infodetail-2587199.html