引言
在使用构造函数创建对象的时候使用的方法是:var test = new Object();
实质上是在其“祖宗”上创建一个对象,因此作为一个"祖宗"对象都拥有的属性是:constructor,prototype属性
Constructor属性
属性定义:返回对创建此对象的函数的引用
使用方法:当我们在开发的过程中遇到一个对象,并不清楚其实那个函数创建的时候,可以调用constructor属性知道其构造方法。
var obj = new Object();
console.log(obj.constructor);
Prototype属性
属性定义:使开发者有能力向对象添加属性和方法
使用方法:在开发的过程中,可以通过此属性,在创建对象的构造函数中添加新属性。
当我们开发中需要往对象中添加新的属性和方法,如果不能在构造函数中添加,那么新创建的对象一样不具备新加入的属性以及方法:
因此要引入Prototype:
var obj = new Object();
//使用prototype添加新方法
Object.prototype.test=function () {
console.log("测试");
}
obj.test();
//创建第二个新的对象
obj2 =new Object();
obj2.test();
Prototype理解
Prototype的实质可以理解:比如:在原有的Object构造函数中的属性有name,age,sex。然后通过Prototype添加属性,相当于创建了一个属性的共享库,将需要添加的属性或者方法写到共享库中以供使用:
因此常用的方式:
//1、构造函数
function Student(option) {
//属性
// this.name = option.name;
// this.age = option.age ;
// this.sex = option.sex ;
this._init(option);
}
//prototype添加新属性和方法
Student.prototype ={
_init:function(option){
//区别于系统的init函数,将构造函数的初始化属性加入此处
this.name = option.name;
this.age = option.age ;
this.sex = option.sex ;
//新加入的属性
this.grade =option.grade;
this.num =option.num;
},
run:function (something) {
console.log(this.name+"在跑");
},
test:function (something) {
console.log(this.name+"在测试");
},
};
var str1 = new Student({name :"Ray",age :18,sex:"男",grade:66,num:13});
str1.run();
str1.test();
console.log(str1);