网络编程
位置:首页>> 网络编程>> JavaScript>> [翻译]JavaScript中对象的层次与继承(8)

[翻译]JavaScript中对象的层次与继承(8)

作者:chenzhe 来源:chenzhe 发布时间:2008-12-31 13:36:00 

标签:类,对象,继承,javascript,编程


确定实例关系

你可能想要知道某个对象的原型链中究竟有些什么对象,所以你可以分辨出这个对象从哪些对象继承属性。在基于类的语言中,你可能拥有一个instanceof操作符来完成这项工作。JavaScript可没有提供instanceof,但是你可以自己写一个这样的函数。

正如在"属性的继承"中所讨论的,当你使用new操作符和构造函数创建新对象的时候,JavaScript将新对象的__proto__属性设置为构造函数的prototype属性的值。你可以使用这一点来测试原型链。

举个例子,假设你使用了我们上面使用的定义,原型都被合适地设置好了。像下面这样创建一个__proto__对象:

程序代码

chris = new  Engineer("Pigman, Chris", ["jsd"], "fiji");

就这个对象而言,下面的语句都是成立(true)的。

程序代码

chris.__proto__  == Engineer.prototype;
chris.__proto__.__proto__ ==  WorkerBee.prototype;
chris.__proto__.__proto__.__proto__ ==  Employee.prototype;
chris.__proto__.__proto__.__proto__.__proto__  ==  Object.prototype;
chris.__proto__.__proto__.__proto__.__proto__.__proto__  == null;

根据这一点,你可以像下面这样写一个instanceOf函数:

程序代码

function  instanceOf(object, constructor) {
  while (object  != null) {
    if (object ==  constructor.prototype) return  true;
    object =  object.__proto__;
  }
  return  false;
}

有以上定义,下面的表达式都成立(true):

程序代码

instanceOf  (chris, Engineer)
instanceOf (chris, WorkerBee)
instanceOf  (chris, Employee)
instanceOf (chris, Object)

但是下面的表达式不成立:

程序代码

instanceOf  (chris, SalesPerson)

0
投稿

猜你喜欢

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