脚本宝典收集整理的这篇文章主要介绍了javaScript原型与原型链,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
JavaScript当中每个对象都有一个特殊的内置属性 [[prototype]](这个就是__proto__隐式原型),这个特殊的对象可以指向另外一个对象。
那么这个对象有什么用呢?
那么如果通过字面量直接创建一个对象,这个对象也会有这样的属性吗?如果有,应该如何获取这个属性呢?
答案是有的,只要是对象都会有这样的一个内置属性;
获取的方式有两种:
那么我们知道上面的东西对于我们的构造函数创建对象来说有什么用呢?它的意义是非常重大的,接下来我们继续来探讨; 这里我们又要引入一个新的概念:所有的函数都有一个prototype的属性:
你可能会有问题,是不是因为函数是一个对象,所以它有prototype的属性呢?不是的,因为它是一个函数,才有了这个特殊的属性;而不是它是一个对象,所以有这个特殊的属性;
我们前面讲过new关键字的步骤如下:
那么也就意味着我们通过Person构造函数创建出来的所有对象的[[prototype]]属性都指向Person.prototype:
事实上原型对象上面是有一个属性的:constructor默认情况下原型上都会添加一个属性叫做constructor,这个constructor指向当前的构造函数对象
function Person(name, age, height, address) {
this.name = name
this.age = age
this.height = height
this.address = address
}
Person.prototype.eating = function() {
console.log(this.name + "在吃东西~")
}
Person.prototype.running = function() {
console.log(this.name + "在跑步~")
}
var p1 = new Person("why", 18, 1.88, "北京市")
var p2 = new Person("kobe", 20, 1.98, "洛杉矶市")
p1.eating()
p2.eating()
当我们编写如下代码的时候,我们会如何来称呼这个Person呢?
在JS中Person应该被称之为是一个构造函数;
从很多面向对象语言过来的开发者,也习惯称之为类,因为类可以帮助我们创建出来对象p1、p2;
如果从面向对象的编程范式角度来看,Person确实是可以称之为类的;
function Person(){
}
const p=new Person()
面向对象有三大特性:封装、继承、多态
那么这里我们核心讲继承。
那么继承是做什么呢?继承可以帮助我们将重复的代码和逻辑抽取到父类中,子类只需要直接继承过来使用即可。那么JavaScript当中如何实现继承呢?不着急,我们先来看一下JavaScript原型链的机制;再利用原型链的机制实现一下继承;
在真正实现继承之前,我们先来理解一个非常重要的概念:原型链。我们知道,从一个对象上获取属性,如果在当前对象中没有获取到就会去它的原型上面获取:
那么什么地方是原型链的尽头呢?比如第三个对象是否也是有原型__proto__属性呢?
我们会发现它打印的是 [Object: null prototype] {}
那么我们可能会问题: [Object: null prototype] {} 原型有什么特殊吗?
从我们上面的Object原型我们可以得出一个结论:原型链最顶层的原型对象就是Object的原型对象
以上是脚本宝典为你收集整理的javaScript原型与原型链全部内容,希望文章能够帮你解决javaScript原型与原型链所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。