JavaScript中的构造函数和原型对象
构造函数:JavaScript中的构造函数可以用来创建特定类型的对象。
1)原生的构造函数:
var obj = new Object();
var array = new Array();
var str = new String();
2)自定义的构造函数
注意:
1)构造函数建议以大写字母开头。
2)如果构造函数以小写字母开头(eg:function person(){} ),使用new操作符创建对象(new person)的时候也是可以的,并不会报错。
3)通过this关键字为构造函数的属性赋值(注:这里的this和Java中的this作用相同)
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHello = function(){
alert("hello, i am " + this.name);
};
}
var person = new Person("jack", 17);
原型对象:
1)原型对象的概念:
1)构造函数在创建的时候,会自动创建一个prototype属性,这个属性指向构造函数的原型对象;
2)构造函数的原型对象会创建一个constructor属性,这个属性指向prototype属性所在的构造函数。
3)调用构造函数创建一个实例后,该实例会自动创建一个[[Prototype]]属性(在浏览器的实现中叫做__proto__),该属性指向构造函数的原型对象。
4)示例:
// 自定义构造函数Person
function Person(){
}
Person:构造函数
PersonPrototype:构造函数(Person)的原型对象
Person.prototype 指向PersonPrototype(Person的原型对象)
Person.prototype.constructor 指向Person
2)原型对象的调用:
构造函数.prototype
3)使用原型对象的好处:让所有对象实例共享原型对象包含的属性和方法。
即:不必在构造函数中定义对象实例的信息,而是可以将这些信息直接添加到原型对象中。
4)例子:
// 1>定义构造函数Person
function Person(){
}
// 2>在Person(构造函数)的原型对象中添加属性
// >>方式一:在new Person前后添加都可以
Person.prototype.name = "jack";
Person.prototype.sayHello = function(){
alert("hello, i am " + this.name);
};
// >>方式二:必须在new Person前添加
Person.prototype = {
name : "jack",
sayHello : function(){
alert("hello, i am " + this.name);
}
};
// 3>调用构造函数创建一个实例
var person1 = new Person();
person1.sayHello(); // hello, i am jack
5)说明:
每当代码读取某个对象(实例)的某个属性时,都会先从对象(实例)本身查找该属性:
如果找到,则停止搜索并返回该属性的值;
如果没有找到,则继续查找该对象(实例)的原型对象,如果找到,则停止搜索并返回该属性的值。
即:如果对象(实例)中存在与对象(实例)的原型对象中同名的属性,那么对象(实例)的属性会屏蔽掉原型对象中的这个同名属性。
JavaScript中的构造函数和原型对象
最新推荐文章于 2022-12-13 14:46:14 发布