手机版

理解javascript中的原型和原型链

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

原型

众所周知,JavaScript不包含传统的类继承模型,而是使用原型原型原型模型。代码实现如下所示

函数Student(name){ this . name=name;} var Kimy=新学生(' Kimy ');student . prototype . say=function(){ console . log(this . name ' say ');} Kimy . say();//Kimysay

Kimy本身没有发言权的方法。当他在自己的对象中找不到这个方法时,他会回到他的原型,也就是Student.prototype对象。这里我们使用一个构造函数Student

构造函数、原型和原型链

除了IE浏览器,其他浏览器都在Object对象的实例上部署了一个非标准的__proto__属性(前后两个下划线),指向这个对象的原型对象,也就是构造函数的原型属性。

偷了一段代码和一张图片

//构造函数Foo(y){ this . y=y;} foo . prototype . x=10;//继承方法“calculate”foo . prototype . calculate=function(z){ return this . x this . y z;};//使用foo模式创建‘b’和‘c’var b=new Foo(20);var c=new Foo(30);//调用继承的方法b . calculate(30);//60c . calculate(40);//80 console . log(b . _ _ proto _ _==Foo . prototype,//true c . _ _ proto _==Foo . prototype,//true b.constructor===Foo,//true c.constructor===Foo,//true Foo . prototype . constructor===Foo//true b . calculate===b . _ _ proto _ _。计算,//true b.__proto__。calculate===Foo . prototype . calculate//true);

我们可以看到每个对象都包含一个__proto__属性,B的__proto__指向B的构造函数Foo的原型属性;Foo.prototype也是一个Object,它的原型__proto__指向构造函数对象。Object.prototype的_ _ prototype _ _被指向null,这形成了一个原型链。

这里也能理解这样一段代码

函数的对象实例//对象的真实函数实例//真实新做了什么

这里还有一个小问题。js中的普通函数和构造函数在形式上似乎没有太大的区别(构造函数的首字母不一定要大写,但通常构造函数的首字母是大写的)。关键词new做了什么?

类似

var Kimy=新学生();

纽做了三件事

var Kimy={ };吉米。__原型_ _ _=学生.原型;学生呼叫(Kimy);1.定义了一个空对象

2.设定它的原型

3.初始化对象

这样,我们就能理解为什么是Kimy了。__proto__指向Student.prototype(相同的引用),结果发现new正在发挥关键作用!

以上就是本文的全部内容,希望大家能喜欢。

版权声明:理解javascript中的原型和原型链是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。