JS 面向对象编程之原型(prototype)

function Person(first, last) {
    this.first = first;
    this.last = last;
}
Person.prototype.fullName = function() {
    return this.first + ' ' + this.last;
}
Person.prototype.fullNameReversed = function() {
    return this.last + ', ' + this.first;
}

Person.prototype 是一个可以被Person的所有实例共享的对象。它是一个名叫原型链(prototype chain)的查询链的一部分:当你试图访问一个  Person 没有定义的属性时,解释器会首先检查这个  Person.prototype 来判断是否存在这样一个属性。所以,分配任何给  Person.prototype 的东西对通过  this 对象构造的实例都是可用的。

这个特性功能十分强大,JavaScript允许你在程序中的任何时候修改原型(prototype)中的一些东西,也就是说你可以在运行时(runtime)给已存在的对象添加额外的方法:

s = new Person("Simon", "Willison");
s.firstNameCaps();  // TypeError on line 1: s.firstNameCaps is not a function

Person.prototype.firstNameCaps = function() {
    return this.first.toUpperCase()
}
s.firstNameCaps(); // SIMON

有趣的是,你还可以给JavaScript的内置函数原型(prototype)添加东西。让我们给  String 添加一个方法用来返回逆序的字符串:

var s = "Simon";
s.reversed(); // TypeError on line 1: s.reversed is not a function

String.prototype.reversed = function() {
    var r = "";
    for (var i = this.length - 1; i >= 0; i--) {
        r += this[i];
    }
    return r;
}
s.reversed(); // nomiS
//定义新方法也可以在字符串字面量上用(string literal)。

"This can now be reversed".reversed(); // desrever eb won nac sihT

猜你喜欢

转载自blog.csdn.net/qq_35713752/article/details/83183679