JavaScript的详细分析示例

  介绍

小编给大家分享一下JavaScript的详细分析示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

一、操作符新

在讲解它之前我们首先需要澄清一个非常常见的关于JavaScript中函数和对象的误解:

在传统的面向类的语言中,“构造函数”是类中的一些特殊方法,使用新<代码> 初始化类时会调用类中的构造函数。通常的形式是这样的:

=new MyClass (. .);

JavaScript也有一个新的<代码> 操作符,使用方法看起来也和那些面向类的语言一样,绝大多数开发者都认为JavaScript中新的<代码> 的机制也和那些语言一样。然而,JavaScript中新的<代码> 的机制实际上和面向类的语言完全不同。

首先我们重新定义一下JavaScript中的“构造函数”,在JavaScript中,构造函数只是一些使用<代码> 新操作符时被调用的函数。它们并不会属于某个类,也不会实例化一个类。实际上,它们甚至都不能说是一种特殊的函数类型,它们只是被新<代码> 操作符调用的普通函数而已。

实际上并不存在所谓的“构造函数”,只有对于函数的“构造调用”。   使用新<代码> 来调用函数,或者说发生构造函数调用时,会自动执行下面的操作:

    <李>创建(或者说构造)一个全新的对象,李 <李>这个新对象会被执行[[原型]]连接; <李>这个新对象会绑定到函数调用的; <李>如果函数没有返回其他对象,那么新表达式中的函数调用会自动返回这个新对象。

因此,如果我们要想写出一个合乎理论的新 <代码>,就必须严格按照上面的步骤,落实到代码上就是:

/* *   * @param {fn}函数(任何)构造函数   * @param {__arg1、最长,……}指定的参数列表   */函数myNew (fn…args) {//创建一个新对象,并把它的原型链(__proto__)指向构造函数的原型对象   const实例=Object.create (fn.prototype)//把新对象作为thisArgs和参数列表一起使用电话或申请调用构造函数   const结果=fn。应用(例如,args)      如果构造函数的执行结果返回了对象类型的数据(排除零),则返回该对象,否则返新对象   返回的结果,,===& # 39;typeof实例对象# 39;)?结果:实例   }

示例代码中,我们使用<代码> Object.create (fn.prototype) 创建空对象,使其的原型链<代码> __proto__> fn.prototype> Object.create() 方法搞清楚它是如何做到的。

二,操作符运算符

在相当长的一段时间里,JavaScript只有一些近似类的语法元素,如新<代码> 和<代码>运算符> 关键字。

在不考虑<代码>类> 和<代码>运算符之间的关系“暧昧不清”。之所以会出现新<代码> 和<代码>运算符这些操作符,其主要目的就是为了向“面向对象编程”靠拢。

因此,我们既然搞懂了<代码> ,就没有理由不去搞清楚<代码>运算符> 运算符> 运算符运算符用于检测构造函数的<代码> 属原型性是否出现在某个实例对象的原型链上”。

看到这里,基本上明白了,<代码>运算符> 原型的理解。在JavaScript中关于原型和原型链的内容需要大篇幅的内容才能讲述得清楚,而网上也有一些不错的总结博文,其中帮你彻底搞懂JS中的原型,__proto__与构造函数(图解)就是一篇难得的精品文章,通透得梳理并总结了它们之间的关系和联系。

《你不知道的JavaScript上卷》第二部分-第5章则更基础,更全面地得介绍了原型相关的内容,值得一读。

以下<代码>运算符代码的实现,虽然很简单,但是需要建立在你对原型和原型链有所了解的基础之上,建议你先把以上的博文或文章看懂了再继续。

/* *   * @param{左}对象实例对象   * @param{右}函数构造函数   */函数myInstanceof(左、右){//保证运算符右侧是一个构造函数   如果(typeof没错!==& # 39;函数# 39;){   把新的错误(& # 39;运算符右侧必须是一个构造函数& # 39;)   返回   }//如果运算符左侧是一个零或者基本数据类型的值,直接返回错误的   如果(左===null | | ![& # 39;函数# 39;& # 39;对象# 39;]。包括(typeof左)){   返回假   }//只要该构造函数的原型对象出现在实例对象的原型链上,则返回真,否则返回错误的   让原型=Object.getPrototypeOf(左)   而(真){//遍历完了目标对象的原型链都没找到那就是没有,即到了Object.prototype      如果(原型===null)返回false//找到了   如果(原型===right.prototype)返回true//沿着原型链继续向上找   原型=Object.getPrototypeOf(原型)   }   }

JavaScript的详细分析示例