function Person(){
this.name;
this.age;
this.sex;
this.getName = function(){
return this.name;
}
this.getSex = function(){
return this.sex;
}
this.getAge = function(){
return this.age;
}
}
function Girl(){
this.sex = "female";
this.isSingle = true;
}
Girl.prototype = new Person();
var jessica = new Girl();
jessica.name = "Jessica";
jessica.age = "24";
RyanDing指点出JS也可以写得很有“性能”。上一段JS代码在效率上就很有问题,每次实例化的时候都需要将 getName,getSex , getSex 给实例化出来。这些东西可以放在js特有的原型内。
对比下修改后的JS代码:
function Person() {
this.name; // 值传递,每次实例化后都会重新建立一个副本
this.age;
this.sex;
}
//实例化对象后进行引用传递不会建立新的内存副本。提高js性能
Person.prototype.getName = function () {
return this.name;
}
Person.prototype.getSex = function () {
return this.sex;
}
Person.prototype.getAge = function(){
return this.age;
}
function Girl() {
this.sex = "female";
this.isSingle = true;
}
// 将Girl的原型指向Person的一个实例
// 因为Person的实例可以调用Person原型中的方法, 所以Girl的实例也可以调用Person原型中的所有属性
Girl.prototype = new Person();
var jessica = new Girl();
jessica.name = "Jessica";
jessica.age = "24";
在面向对象的语言中,使用类来创建一个自定义对象。在JavaScript中一切都可以是对象,用什么办法来创建一个自定义对象?
在这引入另外一个概念 – 原型(prototype)。函数Person称为构造函数,也就是创建自定义对象的函数。可以看出,JavaScript通过构造函数和原型的方式模拟实现了类的功能。 Girl从Person继承了原型prototype中的所有属性。
对比一下C#代码:
public class Person{
public string name{
set;
get;
}
public string sex{
set;
get;
}
public string age{
set;
get;
}
}
public class Girl : Person{
base.sex = "female";
public bool isSingle = true;
}
static void Main(string[] args){
Girl jessica = new Girl();
jessica.name = "Jessica";
jessica.age = "24";
}
继续学习ing……
有3 位同学留下了脚印
我来加一个外链
灵活的运用匿名函数(也叫lambda) 也可以 实现模式。
呃,别拿C#这种静态、编译型语言来比,可以拿PHP、Ruby这种动态、解释型 的来比。
JS基于原型的继承是源自Self语言,与类式继承不同。