JavaScript原型对象(一)

面向对象思想中,是将公共的、抽象的属性和方法提取出来,作为一个基类,子类继承这个基类,从而继承到这些属性和方法。Javascript函数是对象,每个函数都要非依赖的非继承自带的属性prototypeprototype是一个对象。而JavaScript中则可以通过prototype属性来实现类似的作用--定义所有实例对象共享的属性和方法。

function Person(name, gender) {
    this.name = name;
    this.gender = gender;
    this.sayHello = function() {
        console.log('Hello,I am', this.name, '. I\'m a', this.gender);
    };
}

var zs = new Person('zhang san', 'male'),
    xh = new Person('xiao hong', 'female');

zs.sayHello(); // Hello,I am zhang san . I'm a male
xh.sayHello(); // Hello,I am xiao hong . I'm a female

zs.sayHello === xh.sayHello;  // false

上述代码中,zs.sayHellxh.sayHello是两个独立的对象。

function Person(name, gender) {
    this.name = name;
    this.gender = gender;
}
Person.prototype.sayHello = function() {
    console.log('Hello,I am', this.name, '. I\'m a', this.gender);
};

var zs = new Person('zhang san', 'male'),
    xh = new Person('xiao hong', 'female');

zs.sayHello(); // Hello,I am zhang san . I'm a male
xh.sayHello(); // Hello,I am xiao hong . I'm a female

zs.sayHello === xh.sayHello;  // true

_proto_:指向当前对象的原型对象,也就是构造函数的prototype属性。

constructor:指向此prototype对象所在的构造函数,可以通过这个属性来判断这个对象是由哪个构造函数产生的.)

zsxh这两个通过Person构造函数产生的对象,是可访问到Personprototype属性的,所以我们定义在prototype下的sayHello方法,Person的实例对象都可以访问到。

参考链接
http://www.jianshu.com/p/1160d65ce3c3
http://javascript.ruanyifeng.com/oop/prototype.html#toc3

你可能感兴趣的:(JavaScript原型对象(一))