网络编程
位置:首页>> 网络编程>> JavaScript>> instanceof 内部机制探析

instanceof 内部机制探析

作者:lifesinger 来源:岁月如歌 发布时间:2009-09-25 13:09:00 

标签:JavaScript,instanceof,类,子类

在 JavaScript 中,可以用 instanceof 来判断一个对象是不是某个类或其子类的实例。比如:

// 代码 1
function Pig() {}
var pig = new Pig();
alert(pig instanceof Pig); // => true

function FlyPig() {}
FlyPig.prototype = new Pig();
var flyPig = new FlyPig();
alert(flyPig instanceof Pig); // => true

来看另一段代码:

// 代码 2
function Pig() { Pig.prototype = {/* some code */} }
var pig = new Pig();
alert(pig instanceof Pig); // => false

为何上面的猪 pig 不再是猪 Pig 了呢?

当一个对象是某个类的实例时,意味着这个对象具有该类的方法和属性。在 JavaScript 中,一个猪类的特性体现在原型中:

// 代码 3
function Pig() {}
Pig.prototype = {
    "吃猪食": function() {},
    "睡觉": function() {},
    "长膘": function() {}
};
var pig = new Pig();
alert(pig instanceof Pig); //=> true

如果动态改变了猪的特性,让猪变成了牛:

// 代码 4
Pig.prototype = {
    "吃草": function() {},
    "犁田": function() {}
};
var niu= new Pig();
alert(pig instanceof Pig); //=> false
alert(niu instanceof Pig); //=> true

当未改变 Pig 的 prototype 时,猪还是猪,因此代码 3 中 pig 是 Pig 的实例。当改变 prototype 后,猪已经不是猪,而是披着猪皮的牛了。因此代码 4 中 pig 不再是 Pig 的实例,niu 反而是 Pig 的实例。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com