我理解的javascipt中的__proto__与prototype

javascript中为了引入面向对象特性,在函数中加入了__proto__和prototype,所以可以用基于原型链的方法来模拟面向对象编程,

那么__proto__和prototype有什么作用呢? 可以通过测试实例验证其作用。

测试1:

function TestA(){

   console.log("construct TestA");

}

TestA.prototype.helloCall = function(){

    console.log("I am prototype method call info !");

}

let instA = new TestA();

console.log(TestA.prototype);

console.log(TestA.__proto__);

console.log(instA.prototype);

console.log(instA.__proto__);

instA.helloCall();

以上测试let instA = new TestA();实际上会分成多步:

let instA = {};

instA.__proto__ = TestA.prototype;

TestA.call(instA);

只有对象才有__proto__属性(instA有__proto__属性,而TestA类是没有__proto__属性的,只有prototype属性)

当用instA调用函数或引用属性时,如果在instA对象本身找不到该属性,则会去找instA__proto__里面是否有该方法

或者属性,这样就可以基于原型链模拟继承。

如上测试,instA.helloCall();实例对象instA调用helloCall方法,首先在instA中查找是否有该方法,如果没有就会查找instA.__proto__(就是TestA.prototype,也就是TestA中)中是否有该方法,有则调用。

如果想将公共的属性或方法让父类继承,则可以放在构造函数的prototye上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值