简单理解javascript中的原型对象,实现对之间共享属性和行为

时间:2021-04-12 14:49:25

javascript中提供了构造函数,能够方便的创建对象。典型的构造函数如下:

function Person(name, age) 
{   
  this.name = name;
  this.age = age;
  this.say = function () {
    return this.name  + ',' + this.age;;
}

 

之后就可以用new和构造函数创建多个对象。javascript中,类的不同对象之间,属性和方法都是独立的。什么意思呢?java中类的不同对象之间,成员变量是独立的(每个对象都有自己的存储空间,存储属性值),但是方法是共享的,内存中只有一份。但是javascript中,方法也是一个对象一份。如果复创建了多个对象,那么每个对象中的方法都会在内存中开辟新的空间,这样浪费的空间就比较多。

var p1= new Person('a', 25);
var p2= new Person('b', 22); 
alert(p1.say == p2.say);//结果返回的是false,说明方法内存空间也不同



javascript中没有什么static和成员变量之分,如果想在对象之间共享数据或方法,只能借助原型对象,将共享的变量和方法都放在原型对象中。

function User(name,age)
{
    this.name = name;
    this.age = age;
}
User.prototype.addr = 'shenzhen';//在原型中添加属性
User.prototype.show = function(){//在原型中添加方法
    alert(this.name+'|'+this.age);    
};
var user1 = new User('ZXC',22);
var user2 = new User('CXZ',21);
alert(user1.show == user2.show);//返回 true 说明show方法是共享的

 

JS的构造函数都有一个prototype属性,指向它的原型对象(其实就是个普通的JS对象)。通过同一个构造函数创建出来的对象,共享同一个原型对象。原型对象初始化的时候是空的,我们可以在里面自定义任何属性和方法,这些方法和属性都将被该构造函数所创建的对象继承。如果原型发生了变化,那么所有实例都会跟着改变。