JavaScript类的写法
我们知道,在js中,是没有类的概念的。类的所有实例对象都从同⼀个原型对象上继承属性,因此,原型对象是类的核⼼。
类是对象的抽象,⽽对象是类的具体实例。类是抽象的,不占⽤内存,⽽对象是具体的,占⽤存储空间。———百度百科
早期的javascript需求都很简单,基本都是写成函数的,然后是⾯向过程的写法,后来慢慢的引⼊⾯向对象开发思想,再后来就慢慢写成类。
在js中,写成类的本质基本都是构造函数+原型。下⾯,就讨论⼀下js类的⼏种写法:
构造函数法
/**
* Person类:定义⼀个⼈,有name属性和getName⽅法
*/
<script>
function Person(name){
this.name = name;
return this.name;
}
}
//我们在这⾥实例化⼏个对象
var p1 = new Person("trigkit4");
var p2 = new Person("mike");
console.log(p1 instanceof Person);//true
console.log(p2 instanceof Person);//true
</script>
由上⾯控制台输出结果可知,p1和p2的确是类Person的实例对象。instanceof操作符左边是待检测类的对象,右边是定义类的构造函数。这⾥,instanceof⽤来检测对象p1是否属于Person类。
这种⽅式的优点是:我们可以根据参数来构造不同的对象实例,缺点是每次构造实例对象时都会⽣成getName⽅法,造成了内存的浪费。
我们可以⽤⼀个外部函数来代替类⽅法,达到了每个对象共享同⼀个⽅法。改写后的类如下:
//外部函数
<script>
function getName() {
return this.name;
}
function Person(name){
this.name = name;
}
函数prototype</script>
原型⽅式
<script>
function Person(){};
Person.prototype.name = "trigkit4";//类的属性都放在prototype上
Name = function(){
return " I'm " + this.name;
}
var p1 = new Person();
var p2 = new Person();
console.log(p1.name);//trigkit4
console.Name());//I'm trigkit4
</script>
原型⽅式的缺点就是不能通过参数来构造对象实例 (⼀般每个对象的属性是不相同的) ,优点是所有对象实例都共享getName
⽅法(相对于构造函数⽅式),没有造成内存浪费。
构造函数+原型⽅式
取前⾯两种的优点:
a、⽤构造函数来定义类属性(字段)。
b、⽤原型⽅式来定义类的⽅法。
<script>
function Person(name){
this.name = name;
}
//原型的特性可以让对象实例共享getName⽅法
Name = function(){
return " I'm " + this.name;
}
</script>
这样,我们就既可以构造不同属性的对象,也可以让对象实例共享⽅法,不会造成内存的浪费。
为了让js代码风格更紧凑,我们让prototype⽅法代码移到function Person的⼤括号内。
<script>
function Person(name){
this.name = name;
Name = function(){
return name;//不宜⽤this.name
}
}
var p1 = new Person('trigkit4');
console.Name());//trigkit4
</script>
在这⾥,我们需要知道的⼏种定义类的⽅法,除了上⾯的构造函数外,还有:
⽤这个⽅法,"类"就是⼀个对象,⽽不是函数。
var Person = {
name : "trigkit4",
age : 21,
run: function(){
alert("I like running");
}
}
然后,直接⽤ate()⽣成实例,不需要⽤到new。
var p1 = ate(Person);
alert(p1.age);//21
p1.run();//I like running
这种⽅法⽐"构造函数法"简单,但是不能实现私有属性和私有⽅法,实例对象之间也不能共享数据,对"类"的模拟不够全⾯。createNew()⽅法
这种⽅法不需要⽤到this和prototype,其做法是⽤对象来模拟⼀个类,然后在类⾥⾯定义⼀个构造函数createNew(),然后在createNew()⾥⾯定义实例对象,把这个实例对象作为返回值。
<script>
var Person = {
createNew : function () {
var person = {};
person.name = "trigkit4";
person.run = function(){
alert("I like running");
};
return person;
}
}
</script>
使⽤的时候,调⽤createNew()⽅法,就可以得到实例对象。
var p1 = ateNew();
p1.run();//I like running
这种写法其实和对象字⾯量的写法是很类似的,只不过⼀个是逗号分隔,⼀个是分号分隔。以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。