美文网首页
原型及原型链

原型及原型链

作者: 小月半吱 | 来源:发表于2019-01-31 18:06 被阅读0次

很多初学者在自学前端一些原型、原型链和原型链的查找搞不清楚,很容易学蒙圈,分享一些在爱前端学习时总结的知识希望可以帮到你们

每一个函数天生就有原型(prototype)。

当函数被new调用的时候,产生的实例的__proto__都指向此构造函数的prototype对象。

function Fun () {

}

var f = new Fun();

console.log(f.__proto__ === Fun.prototype);//true

每一个函数天生都有prototype属性,它指向一个原型对象,这个属性对函数自己没有任何的用途。它唯一的用途给函数创建出来的实例用的。构造函数的prototype的指向个它new出来的__proto__属性的指向一样。

每一个对象在用点语法访问自己的属性和方法的时候,当遇见自己身上没有的属性或方法的时候,都会沿着原型链去查找。若果原型链上有这个查找的属性或方法,此时对象也可以打点调用个这个方法。如同自己的方法一样。

function People (name,age,sex) {

this.name = name;

this.age = age;

this.sex =sex;

}

People.prototype.sayHello = function(){

alert("你好,我是"+this.name+",我是一个可爱的小"+this.sex+"孩儿,我今年"+this.age+"岁了!")

};

var xiaoming = new People("小明",12,"男");

var xiaohong = new People("小红",12,"女");

console.log(xiaoming);

console.log(xiaohong);

xiaoming.sayHello();

xiaohong.sayHello();

console.log(xiaoming.sayHello === xiaohong.sayHello); //true

xiaoming和xiaohong的sayHello 的方法放在了构造函数的原型上了。

当xiaoming和xiaohong打点调用sayHello 的方法的时候,先看自己有没有,自己没有,就去People.prototype身上查找。

若果People.prototype身上没有sayHello 的方法,它会沿着People.prototype.prototype去查找,一直查找到object.prototype上为止,若都没有,那次方法或属性不能用。

我们称People.prototype是People构造函数的“原型”,People.prototype是xiaoming和xiaohong的“原型对象”。

__proto__这个功能将我们的函数能实现复用了,因为JS程序设计的时候,所有的对象都有原型链查找功能。

3.2 、Object.prototype 是所有的对象原型链的终点

任何的对象都有原型对象(__proto__)

在JS中,对象是对象,函数是对象,数组也是对象,正则表达式也是对象,所有的引用类型值都是对象。在JS中都是对象,他们都有__proto__属性。

Object它是JS程序语言中内置的一个构造函数,“所有的真正对象”可以认为是Object new出来的。

var obj = new Object();

obj.name = "小红";

obj.age = 12;

console.log(obj);

console.log(Object.prototype === obj.__proto__);

所有的真正对象不是函数、不是数组、不是正则;

真正对象而是以{}这样字面量形式定义的对象和所有的原型对象可以看做是Object new出来的。

var obj1 = {

}

console.log(Object.prototype === obj1.__proto__);

function People () {

}

var xiaoming = new People();

console.log(People.prototype.__proto__ === Object.prototype);

Object.prototype 是唯一没有__proto__的对象。而其它的所有的对象、函数、数组、正则表达式都有__proto__。

先分享这么多了,以后会不定期的分享,如果你也是自学,可以加一些技术群一起探讨交流,也可以加我在的爱前端技术分享交流群哦。

相关文章

  • lesson 5 面向对象及原型链 2021-04-29

    课程标题 面向对象及原型链 课程目标 面向对象思想 原型及原型链 继承 知识点 面向对象思想 原型链的指向 new...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

  • 原型及原型链

    使用对象---->使用对象中的属性和和对象中的方法,使用对象就要先有构造函数 构造函数 原型链:是一种关系,实例对...

  • 原型及原型链

  • 原型及原型链

    很多初学者在自学前端一些原型、原型链和原型链的查找搞不清楚,很容易学蒙圈,分享一些在爱前端学习时总结的知识希望可以...

  • 原型及原型链

    在JS中有继承的概念,继承的大概意思以一个对象为基础去创建另一个对象,而另一个对象可以借用基础对象的属性,函数等。...

  • 原型及原型链

    相信好多人对JS原型以及原型链都有过懵逼的状态,我也一样。但如果稍微弄懂一些或是有点儿思路的时候,会感觉原型链也是...

  • 原型及原型链

    什么是原型 js中的原型指的是一个对象可以从另一个对象继承特性。每个对象都有一个原型对象,对象以其原型对象为模板,...

  • 原型及原型链

    原型是什么 原型:每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象的用途是包...

  • 原型及原型链

    普通函数与构造函数 函数还是之前的函数,唯一的区别就是首字母大写 普通函数 正常调用,不需要 new 关键字 执行...

网友评论

      本文标题:原型及原型链

      本文链接:https://www.haomeiwen.com/subject/xmkapftx.html