了解__proto__和prototype还有原型还有原型链之间的关系

对象只有__proto__属性
函数有prototype属性
函数是个特殊的对象所以它也有这个__proto__这个属性

function Animal(name,weight){
				this.name = name;
				this.weight = weight;
			}
			Animal.prototype.eat = function(){console.log("动物吃东西")};
			function Dog(color){
				this.color = color;
			}
			function ErDog(sex){
				this.sex = sex;
			}
			Dog.prototype = new Animal("狗","25kg"); // Dog.__proto__  Animal
			Dog.prototype.eatperson = function(){console.log("咬人")};
			ErDog.prototype = new Dog("黑色");
			ErDog.prototype.play = function(){console.log("逗人开 心")};
			var erdog = new ErDog("公");
			erdog.eat(); // 动物吃东西

在这里插入图片描述
js不是一个面向对象的语言,因为它是一个弱类型语言,弱类型语言没有多态在一特点,它是通过模拟对象来实现继承和封装的,继承就是子对象继承它父亲的属性和方法,但是它不想java一样可以直接用extend来实现继承,这样的化它自己和它的父元素是怎么联系到一起的呢?
看上图就可以看出来对象与对象之间通过一个__proto__属性连接到一起,这就是原型链的一部分,在查询这个对象的属性时,如果这对象没有这个属性,它就会沿着这条原型链进行查找,如果变量找不到的话会返回undefined,如果时方法找不到的话会抛出异常
在这里插入图片描述
这些构造函数和它们的原型还有实例化出来的对象之间的关系,
可以看出来它们实例化出的对象都是通过__proto__这个属性连接起来,
最终执行Animal的原型,所以它们都是算是从Animal的原型中衍生出来的对象,Animal.proto == Object.prototype

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值