javascript本身不支持类,但可以通过以下方法模拟出类。
- 构造函数法
- Object.create()法
- 极简主义法
1、构造函数法
function Person() {
this.type = '人'
}
var person1 = new Person();
console.log(person1.type); // 人
Person.prototype.run = function(){
console.log('我在跑');
}
使用构造函数模拟‘类’,在构造函数内部使用this指向实例对象。
生成实例的时候使用new 关键字。
类的属性和方法,也可以定义在原型上。构造函数的prototype对象。
2、Object.create()法
var Person = {
type: '人',
run: function(){
console.log('我在跑');
}
}
var person1 = Object.create(Person);
console.log(person1.type); // 人
person1.run(); // 我在跑
如果浏览器不支持Object.create方法,可以自己创建。
if(!Object.create){
Object.create = function(o){
function F(){};
F.prototype = o;
return new F();
}
}
这种方法比”构造函数法”简单,但是不能实现私有属性和私有方法,实例对象之间也不能共享数据,对”类”的模拟不够全面。
3、极简主义法
荷兰程序员Gabor de Mooij提出了一种比Object.create()更好的新方法,他称这种方法为”极简主义法”(minimalist approach)。
封装
首先,它也是用一个对象模拟”类”。在这个类里面,定义一个构造函数createNew(),用来生成实例。
然后,在createNew()里面,定义一个实例对象,把这个实例对象作为返回值。
使用的时候,调用createNew()方法,就可以得到实例对象。
var Person = {
createNew: function(){
var Person = {};
Person.type = '人';
Person.run = function(){
console.log('我在跑');
}
return Person;
}
}
var person1 = Person.createNew();
person1.run(); // 我在跑
继承
让一个类继承另一个类,实现起来很方便。只要在前者的createNew()方法中,调用后者的createNew()方法即可。
var Male = {
createNew: function(){
var male = Person.createNew();
male.type = '男';
male.swim = function(){
console.log('我在游泳');
}
return male;
}
}
var male1 = Male.createNew();
male1.swim();
私有属性和私有方法
在createNew()方法中,只要不是定义在cat对象上的方法和属性,都是私有的。
var Male = {
createNew: function(){
var male = Person.createNew();
var swim = '我在游泳';
male.doSwim = function(){
console.log(swim);
}
return male;
}
}
var male1 = Male.createNew();
male1.doSwim();
male1.swim; // undefined
数据共享
有时候,我们需要所有实例对象,能够读写同一项内部数据。这个时候,只要把这个内部数据,封装在类对象的里面、createNew()方法的外面即可。
var Male = {
place:'南海',
createNew: function(){
var male = Person.createNew();
male.doSwim = function(){
console.log('我在'+Male.place+'游泳');
}
male.changePlace = function(place){
Male.place = place;
}
return male;
}
}
var male1 = Male.createNew();
male1.doSwim();
var male2 = Male.createNew();
male2.changePlace('北海');
male1.doSwim();
本文介绍了在JavaScript中模拟类的三种方法:构造函数法、Object.create()法和极简主义法。每种方法都有其特点,如构造函数法适用于定义公共方法和属性,而极简主义法则更易于实现继承和封装。
701

被折叠的 条评论
为什么被折叠?



