JavaScript中从原型到原型链的示例分析

  介绍

这篇“JavaScript中从原型到原型链的示例分析”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“JavaScript中从原型到原型链的示例分析”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获、下面让我们一起来看看具体内容吧。

<强>一、构造函数

<编辑> 1.1什么是构造函数?

构造函数本身就是一个函数,与普通函数没有任何区别,不过<强>为了规范一般将其首字母大写强。构造函数和普通函数的区别在于,使用新<强> 生成实例的函数就是构造函数,直接调用的就是普通函数。

function 人(),{   this.name = 'yuguang';};var person = new Person();console.log(person.name) // yuguang

在这个例子中,Person 就是一个构造函数。

1.2 constructor?

constructor 返回创建实例对象时构造函数的引用。此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。

JavaScript中从原型到原型链的示例分析
可以看到实例对象的constructor指向了它的构造函数,而它和原型的关系我们在之后会链接到一起。

1.3 都有哪些数据类型或者函数拥有constructor呢?

在JavaScript中,每个具有原型的对象都会自动获得constructor属性。除了:argumentsEnumeratorErrorGlobalMathRegExp等一些特殊对象之外,其他所有的JavaScript内置对象都具备constructor属性。例如:ArrayBooleanDateFunctionNumberObjectString等。所有主流浏览器均支持该属性。打开控制台我们可以验证一下

// 字符串console.log('str'.constructor) // ? String() { [native code] }console.log('str'.constructor === String) // true// 数组console.log([1,2,3].constructor) // ? Array() { [native code] }console.log([1,2,3].constructor === Array) // true// 数字var num = 1console.log(num.constructor) // ? Number() { [native code] }console.log(num.constructor === Number) // true// Dateconsole.log(new Date().constructor) // ? Date() { [native code] }// 注意!!!不要混淆哦console.log(new Date().getTime().constructor) // ? Number() { [native code] }// Booleanconsole.log(true.constructor) // ? Boolean() { [native code] }console.log(true.constructor === Boolean) // true// 自定义函数function show(){
  console.log(& # 39;光# 39;);};console.log (show.constructor),//, ?,函数(),{,[native 代码]}//,自定义构造函数,无返回值function 人(){
  时间=this.name 名称;};var  p =, new 人()console.log (p.constructor),//, ?,人()//,有返回值function 人(){
  this.name =,名称;
  return  {
  名称:,& # 39;光# 39;
  }};var  p =,人()console.log (p1.constructor),//, ?,对象(),{,[native 代码]}
<编辑> 1.4模拟实现一个新的

既然构造函数与普通函数的区别仅仅在于调用方式上,我们就应该了新的解。

<李>

当调用<代码> 新运算符时,该函数总会返回一个对象,

<李>

通常情况下,构造器里的这就指向返回的这个对象,

代码如下:

通常情况下var  MyClass =,函数(){   时间=this.name  & # 39;光# 39;;};var  obj =, new  MyClass (); obj.name;,//,光特殊情况var  MyClass =,函数(){   时间=this.name  & # 39;光# 39;;   return  {   名称:,& # 39;老王& # 39;   }};var  obj =, new  MyClass (); obj.name //,老王

我们利用<代码> __proto__> var  objectNew =,函数(){   ,,,//,从object.prototype上克隆一个空的对象   ,,,var  obj =, new 对象();,   ,,,//,取得外部传入的构造器,这里是人   ,,,var  Constructor =, [] .shift.call (, arguments );   ,,,//,更新,指向正确的原型   ,,,obj.__proto__ =, Constructor.prototype;,//知识点,要考,要考,要考,   ,,,//,借用外部传入的构造器给obj设置属性   ,,,var  ret =, Constructor.apply (obj,参数);   ,,,//,确保构造器总是返回一个对象   ,,,return  typeof  ref ===, & # 39;对象# 39;,?,ret :, obj;}

JavaScript中从原型到原型链的示例分析