函数相关:原型相关

82 阅读1分钟

prototype原型,原型对象相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的,如不进行定义维持默认的内容,统一设置到原型对象中,所有实例的原型对象均指向类的原型对象,所有实例的如果自己对和类的原型对象相同名称属性进行了赋值,则维持每个实例的值,如果没有定义,但是要求输出,便从类的原型对象中获取。

//定义一个Person类

function Person(name,age,gender){

this.name = name;

this.age = age;

this.gender = gender;

this.sayHello = function(){

console.log("你好,我叫"+name);

}

//通过变量per1,per2将Person类实例化

var per1 = new Person("Sam",18,”男“);

var per2 = new Person("Tommy",19,"男");

per1.sayHello();

//但是对于Person类中的sayHello属性,也就调用一次,之后都不会再调用,如果定义在类的代码中,会显得臃肿,可以将sayHello方法单独封装

function sayHello = function(){

console.log("你好,我叫" + name);

}

然后将原类的sayHello方法后替换为sayHello,但是仍然会带来全局变量中定义函数,会污染的问题,针对此种情况,可以将sayHello函数放入Person类的prototype原型对象中

Person.prototype.sayHello = sayHello;

之后per1,per2调用sayHello方法时,会先看自身有没有此方法,如果没有,会从类的原型对象中找,因为所有的实例的原型对象都指向类的原型对象的地址。