Javascript的沿袭

Javascript的继承?????? 最近有些想看点技术书籍,这两天看了下javascript的设计模式,觉得里面的继承挺有意

Javascript的继承

?????? 最近有些想看点技术书籍,这两天看了下javascript的设计模式,觉得里面的继承挺有意思的。javascript不像C++、java这些语言有已有的继承方式,它的继承需要自己去用代码实现。

仿照其它语言实现继承的函数如下:

?

这个是模仿其他语言实现的继承代码。关于里面的Constructor解释一下:定义一个构造函数是,其默认的prototype对象是一个Object类型的实例,其constructor属性会默认设置成构造函数本身。如果手工将其prototype设置为另一个对象,那么新对象自然不会具有原对象的constructor值,所有需要重新设置其constructor属性。

?

原型式继承

var Person = {  name : "Default value",  getName : function(){    return this.name;  }}function clone(object){  var F = function(){};  F.prototype = object;  return new F();}var reader= clone(Person);alert(reader.getName());reader.name = "Mr Yang";alert(reader.getName());var Author = clone(Person);Author.books = [];Author.getBooks = function(){  return this.books;}var author = [];author[0] = clone(Author);author[0].name = "Dustin Diaz";author[0].books = ["Javascript Design Patterns"];author[1] = clone(Author);author[1].name = "Ross Harmes";author[1].books = ["Javascript Design Patterns"];alert(author[1].getName());alert(author[1].getBooks()); 
?

clone函数可以用来创建新的类Person对象,他会创建一个空对象,而该对象的原型对象被设置成为Person,这意味着

在新对象中查找属性或者方法时,如果找不到,那么查找过程会在其原型对象上查找。

原型式继承中,不论是继承还是创建新的对象,都是通过clone函数实现的。

原型式继承对继承而来的成员的读和写具有不对等行。一个克隆并非其原型对象的一份完全独立的副本,它只是一个以那个对象为原型对象的空对象而已。克隆刚被创建时,author[1].name其实是一个返回最初的Person.name的链接,对于从原型对象继承而来的成员,其读和写具有内在的不对等性。

?

?