在java中已经定义了的类属性和方法是不能在外部新增属性和方法的,但是在JS有一点不同。
构造函数和原型
在前面的章节中我们学会了如何使用对象的构造器(constructor):
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
var myFather = new Person("John", "Doe", 50, "blue");
var myMother = new Person("Sally", "Rally", 48, "green");
要添加一个新的属性nationality 需要在在构造器函数中添加:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
还可以通过使用prototype 属性就可以给对象的构造函数添加新的方法和属性:
Person.prototype.nationality = "English";
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};
实现这个功能的原理是原型链
当一个对象尝试访问一个属性或方法时,JavaScript 会首先检查该对象自身是否有这个属性或方法。如果没有,它会沿着原型链向上查找。

prototype属性可以看成是一块特殊的存储空间,是函数独有的属性,从图中可以看到它从一个函数指向另一个对象,代表这个对象是这个函数的原型对象,这个对象也是当前函数所创建的实例的原型对象。所有实例共享属性和方法。 __proto__属性是对象(包括函数)独有的,从一个对象指向该对象的原型对象(也可以理解为父对象)。 constructor是对象才有的属性,从图中看到它是从一个对象指向一个函数的。指向的函数就是该对象的构造函数。
Comments NOTHING