关闭

子类的prototype=父类的prototype错误点

标签: javascriptprototype
68人阅读 评论(0) 收藏 举报
分类:

本文只做我的笔记用

//--- Wrong ---
/*
Dog.prototype=Animal.prototype;//引用类型赋值,赋的是引用(即内存地址)  引用同一个内存地址 指向同一个对象,可通过任一引用修改该prototype对象
console.log(Dog.prototype.constructor); //Animal
Dog.prototype.constructor=Dog; //回复prototype对象的constructor的默认值 指向构造函数
Dog.prototype.goodat=function(){
    alert('i am good at protecting');
};
var animalA=new Animal('red','pig');
console.log(animalA.color + ' '+ animalA.name); //red pig
animalA.sayHi(); // hi, i am a pig
animalA.goodat();// i am good at protecting  
//创建Dog.prototype.goodat方法时,其实修改的是Animal.protoype对象,子类的原型对象和父类的原型对象为同一对象,子类的原型对象无法独自扩展,扩展属性或方法时,其实修改的是父类的原型对象,所以必须用new 方式创建对象实例,赋值给子类的原型对象(子类的原型对象又是父类的实例对象,这样当子类的实例在它自身和子类的原型对象都找不到方法时,子类的原型对象会向父类的原型对象查找(因为子类的原型对象是父类的实例),这样就形成了原型链)

*/

//--- Right ,but not perfect---
/*
Dog.prototype=new Animal(); //Dog.prototype对象除了有指向Animal.prototype对象的引用,还多了个属性 type='animal';
console.log('----------------');
console.log(Dog.prototype.constructor); //Animal
Dog.prototype.constructor=Dog;//恢复Dog.prototype.constructor的默认值 

var dogA=new Dog('black','Buddy');
dogA.sayHi();// i am a buddy
Dog.prototype.goodat=function(){
    alert('i am good at protecting');
}
dogA.goodat(); // i am  good at protecting
alert(dogA.type); //animal,  Dog.prototype.type

var animalA=new Animal('green','kitty');
animalA.sayHi(); // i am kitty
alert(animalA.goodat); // undefined
*/
//---- Right perfect ----
var F=function(){} //一个function对象
F.prototype=Animal.prototype;  //指向同一个对象 同内存地址
Dog.prototype=new F();
 // 建立原型链 Dog的实例对象在自身找不到对应属性,会在prototype对象中找,还是找不到则到F.prototype所指向的地址(即Animal.prototype对象)找 (因为Dog.prototype是F类的实例对象)

0
0
查看评论

用实例谈谈javascript中的this和prototype

js语言应用中,面向对象的思想非常
  • yingyiledi
  • yingyiledi
  • 2014-05-07 16:32
  • 7224

javascript 函数属性prototype详解

在JavaScript中并没有类的概念,但JavaScript中的确可以实现重载,多态,继承。这些实现其实方法都可以用JavaScript中的引用和变量作用域结合prototype来解释。 1、prototype 在JavaScript中并没有类的概念,但JavaScript中的确可以实现重载,多...
  • napoleonjk
  • napoleonjk
  • 2014-11-26 14:54
  • 1944

JavaScript中prototype用法

1 概述 大部分面向对象的编程语言,都是以类class作为对象的基础语法,js语言不是如此,它的面向对象编程基于‘原型对象’。 首先说说构造函数的缺点: js通过构造函数生成新的对象,因此构造函数可以视为独享的模版。实例对象的属性和方法,可以定义在构造函数内部 概述 构造函数的缺点 JavaScri...
  • jasonzds
  • jasonzds
  • 2016-12-17 14:23
  • 1508

ProtoType框架的使用

ProtoType框架的使用(2008-10-13 15:37:18)转载 标签: ajax div undefined ids name
  • chen__jinfei
  • chen__jinfei
  • 2011-05-30 16:57
  • 1782

设计模式总结之Prototype Pattern(原型模式)

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
  • cooldragon
  • cooldragon
  • 2016-08-11 00:43
  • 1459

html5中对prototype的理解

今天使用了一个属性 : prototype 先贴一下使用代码: Hero.prototype.die=function(){ //通过获取id改变css样式里的属性值 var dom=document.getElementById("over"); d...
  • qq_26816591
  • qq_26816591
  • 2016-07-24 16:08
  • 455

《Spring揭秘》笔记——prototype作用域的“坑”

xml配置如下 --> 相关类如下 public class MockNewPersister implements IFXNewsPersister { private FXNewsBean newsBean; public void persisterNe...
  • sanzhongguren
  • sanzhongguren
  • 2017-05-25 12:08
  • 332

spring中bean的作用域属性single与prototype的区别

1。 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把一个bean定义设置为singleton作用域时,Spring IO...
  • linwei_1029
  • linwei_1029
  • 2014-01-17 15:25
  • 11098

js中prototype的陷阱

原型陷阱 //当我们对原型对象执行完全替换时,可能会触发原型链中某种异常 //prototype.constructor属性是不可靠的 function Dog(){ this.tail=true; } var benji=new Dog(); var rusty=ne...
  • wuzhe128520
  • wuzhe128520
  • 2016-05-05 22:51
  • 411

js中的prototype有什么作用?

1、 prototype对象是实现面向对象的一个重要机制。每个函数也是一个对象,它们对应的类就是 function,每个函数对象都具有一个子对象prototype。Prototype 表示了该函数的原型, prototype表示了一个类的属性的集合。当通过new来生成一个类的对...
  • qq_34471305
  • qq_34471305
  • 2017-05-10 20:35
  • 168
    个人资料
    • 访问:393次
    • 积分:47
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:1篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论