看了一些文章,明白了prototype属性的一些意义。
定义在prototype中的属性和方法,是被所有实例所共享的。
也就是说,多个实例调用定义在prototype中的方法时,调用的都是同一个方法,而并不是生成在实例中的方法。
例:
function Person(name, email) {
this.name = name;
this.email = email;
}
Person.prototype.arr = new Array("a","b");
Person.prototype.shareVar = "shareVar";
var john = new Person("john","john@163.com");
var mary = new Person("mary","mary@163.com");
console.debug(john.arr,john.shareVar);
john.arr.push("c");
john.shareVar = "maryShareVar";
//output:["a","b","c"]maryShareVar
console.debug(mary.arr,john.shareVar);
定义在prototype中的属性有点像类属性。
但不同的一点是,调用方法不同(和java比,不能用实例来调用类属性):
类属性:
对:类.类属性
错:实例.类属性
定义在prototype中的属性:
对:实例.属性
错:类.属性