| « | April 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | |
| 公告 |
| 暂无公告... |
| Blog信息 |
|
blog名称: 日志总数:16 评论数量:42 留言数量:1 访问次数:85948 建立时间:2007年5月10日 |

| |
|
[javascript]javascript 继承 文章收藏, 网上资源
kcruci 发表于 2007/7/13 10:55:31 |
| javascript 是一种基于原型的语言,没有显示的继承符号,它有2种隐式的方式可以实现面向对象中的继承: 1 . 在子类中显示的调用父类的构造函数. 例子: function parent () { this.first = parentFirst; this.second = parentSecond; } function child() { this.inherrit = parent; this.inherrit(); this.second = childSecond; } function parentFirst() { alert(" parent First method call !"); } function parentSecond() { alert(" parent second method call !"); } function childFirst() { alert("child first method call !"); } function childSecond() { alert("child second method call !"); } function printClass() { var newObj = new child(); newObj.first(); newObj.second(); } printClass(); 发现最后打印出来结果是 parent first method call ! child second method call ! 我们可以看到,first 和second 方法最先在parent类中定义,在child类中 second方法又被重载了.child类的构造函数的前2行的作用就是做了一个简单的原始继承操作.先把parent的原型赋给child的inherrit方法,执行完parent的构造函数后parent的属性就全在child的属性列表里了.因为 child中是用this来调用parent的构造函数的,javascript解释器会把parent中的this,child中的this 理解成一个作用域下的this,所以就产生了继承效果.
2. 继承的第二种方式: prototype方式. 把父类对象赋给 子类的prototype属性. 把我们的子类改一下: function child() { this.second = childSecond; } 加入 child.prototype = new parent;这一行语句,执行,发现和第一种方式得到同样的结果. 用prototype 方式继承比调用构造函数方式更灵活.用prototype方式可以实现动态继承,比如你用prototype方式给父类动态增加一个属性或者方法,那么子类自动就会获得这个属性或者方法. 在javascript中你可以随意的给对象增加属性或者方法,但是当你给一个实例化的对象增加属性的时候,这个增加的属性只属于这个实例,例如: var newClass = new subClass(); newClass.addprop = "新增属性";如果想为该类的所有实例都增加一个属性或者方法,要用prototype, 例子 var newClass = new child(); child.prototype.addprop = "新增属性"; 这样newClass里就会有addprop这个属性了.这也是我们给javascript内部对象增加属性或者方法的方式,比如 String.prototype.toString={return "aaa";},不过javascript的内部对象的prototype属性都是只读的,所以只能增加内部对象的属性,不能修改. 突然感觉倒 prototype,用处原来如此之多,上边写的不过是其中一小步分啊. |
|
|