iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript函数及prototype怎么使用
  • 213
分享到

JavaScript函数及prototype怎么使用

2023-07-05 12:07:42 213人浏览 安东尼
摘要

这篇文章主要介绍“javascript函数及prototype怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript函数及prototype怎么使用”文章能帮助大家解决问题。一、

这篇文章主要介绍“javascript函数及prototype怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript函数及prototype怎么使用”文章能帮助大家解决问题。

一、定义

函数可以通过声明定义,也可以是一个表达式。

(1)函数声明式:

分号是用来分隔可执行JavaScript语句,由于函数声明不是一个可执行语句,所以不以分号结束。

function a(){console.log('bbb');}

(2)函数表达式:

函数表达式以分号结尾,因为它是一个执行语句。

var a = function(){console.log('aaa');}

(3)声明式变体:

var a = function a(){console.log('bbb');}

完全等价于 function b(){}

二、函数执行

JavaScript解析器将当前作用域内声明的所有变量和函数都会放到作用域的开始处,但是,只有变量的声明被提前到作用域的开始处了,而赋值操作被保留在原处。

示例1:

var a = function(){console.log('aaa');}function a(){console.log('bbb');}a(); //结果:aaa

示例2:

(function() {console.log(noSuchVariable);})();//报错,因为noSuchVariable变量根本没定义
</pre><pre name="code" class="javascript">(function() {console.log(declaredLater); //"undefined"var declaredLater = "Now it's defined!";console.log(declaredLater); //"Now it's defined!"})();//上面这段代码是正确的,没有任何问题。

示例3:

var a; // 声明一个变量,标识符为afunction a() {} // 声明一个函数,标示符也为aalert(typeof a); // functionfunction a() {}var a;alert(typeof a); //functionfunction a() {}var a = 1;alert(typeof a); //numbervar a = 1;function a() {}alert(typeof a); //number

总结:

  • 变量的声明被提前到作用域顶部,赋值保留在原地;

  • 声明式函数整个“被提前”;

  • 函数表达式只有变量“被提前”了,函数没有“被提前”;

  • 函数会首先被提升,然后才是变量,重复的var(变量)声明会被忽略掉;

  • 同名情况下,变量先“被提前”,函数再“再被提前”(即函数覆盖变量);

  • 赋值会根据前后顺序进行覆盖!

三、函数是对象[typeof instanceof]

在 JavaScript 中使用 typeof 操作符判断函数类型将返回"function"。但JavaScript函数描述为一个对象更加准确。JavaScript函数有属性和方法。

(1)typeof区分对象和其他原始值

JavaScript的数据类型分为:原始类型(数字、字符串、布尔值、null、undefined)和对象类型。

typeof[任何类型]返回值(boolean、string、number、object、undefined)和 function

typeof 2; //'number'typeof '2'; //'string'typeof true; //'boolean'typeof []; //'object'typeof null; //'object'typeof undefined; //'undefined'var a = function(){}; typeof a; //'function'

对于所有内置可执行对象,typeof一律返回“function”

typeof new Number(2); //'object'typeof new String('2'); //'object'typeof new Boolean(true); //'object'

(2)instanceof[对象 instanceof 类]判断一个对象是否为类的实例

[] instanceof Object; //true2 instanceof Number; //falsenew Number(2) instanceof Number; //true

示例:

var a = function(){};var b = function(){};a.prototype = new b();new a() instanceof b; //truenew a() instanceof Object; //true

首先确定b.prototype,如果b.prototype在a对象的原型链中,返回true,否则返回false。

注意;所有对象都是Object的实例。

(3)扩展 Object.prototype.toString.call([]) === '[object Array]';

四、prototype

JavaScript 对象有两种不同的属性,一种是对象自身的属性,另外一种是继承于原型链上的属性。

JavaScript中,类的所有实例对象都从同一个原型对象上继承属性,因此,原型对象是类的核心。

(1)只有函数有prototype,对象没有

var b = {};b.prototype.bbb='bbb'; //报错b.prototype为undefinedfunction b(){}b.prototype.bbb='bbb';console.log(b); //结果:function b(){}console.log(b.prototype); //结果:b {bbb: "bbb"}console.log(b.bbb); //结果:undefinedconsole.log(new b().bbb); //结果:bbb

(2)prototype是函数的内置属性(用于设置函数的原型),__proto__是对象的内置属性(用于设置对象的原型)。

PS:注意区分函数和对象

function test(){}test.prototype; //结果:test {}new test().prototype; //结果:undefined,对象没有prototypenew test().__proto__; //结果:test {}function a(){this.v='vvv';}a.prototype; //a {}new a.__proto__; //a {}new a().__proto__ === a.prototype; //true 实例对象的__proto__,指向函数的原型

(3)每个JavasScript函数都自动拥有一个prototype属性。这个属性的值是一个对象,这个对象包含唯一一个不可枚举属性constructor。constructor属性的值是一个函数对象。

function a(){this.v='vvv';}a.prototype.constructor === a; //true[物理地址一样]a.prototype.constructor; //constructor属性指代这个类a.prototype.constructor.__proto__ === a.__proto__ === Function.prototype; //trueObject.prototype.constructor.__proto__ === Object.__proto__ === Function.prototype; //true

PS:所有构造器、函数的__proto__都指向Function.prototype,它是一个空函数(Empty function)

(4)实例

示例1:

function a(){}function b(){}a.prototype = {aaa:'aaa'};b.prototype = a.prototype;var aa1 = new a();var bb1 = new b();//aa1.prototype.aaa='xxx'; //错误,对象没有原型a.prototype.aaa = 'xxx';console.log( aa1.aaa ); //xxxconsole.log( bb1.aaa ); //xxx

补充:a===b; //false    a.prototype === b.prototype; //true

实例2:

function a(){}function b(){ this.bbb='bbb'}a.prototype = new b(); //相当于a.prototype = {bbb: "bbb"};console.log(new a().bbb ); //结果:bbb

补充:a.prototype === b.prototype;  //false

五、实例方法&静态方法

(1)实例方法

function a(){}a.prototype.count = 0;var a1 = new a();a1.count++;var a2 = new a();a2.count++;a.prototype.count; //0

PS:方法类似 a.prototype.method = function(){}

(2)静态方法

function a(){}a.count = 0;new a().count(); //undefined,只能使用a.count调用

PS:方法类似 a.method = function(){}

(3)当代码var p = new Person()执行时,new 做了如下几件事情:

  A. 创建一个空白对象

  B. 创建一个指向Person.prototype的指针

  C. 将这个对象通过this关键字传递到构造函数中并执行构造函数

六、闭包

函数定义时的作用域链到函数执行时依然有效。

示例-典型闭包:

var scope = "global scope";function checkScope(){var scope = "local scope";function f(){return scope;}return f();}checkScope(); //local scope

示例:更为常用的闭包

function counter(){var n=0;return{count:function(){return ++n;},reset:function(){n=0;}};}var c1 = new counter();c1.count(); //1var c2 = new counter();c2.count(); //1c1.reset(); //c1置为0,c2不受影响c2.count(); //2

PS:实例对象互相不影响,单个实例对象内的方法,共享私有变量。

七、通过调用方法的形式来间接调用函数:apply&call

function a(){console.log(this.x+this.y);}a.call({x:100,y:100}); //200function C(){this.m = function(){console.log(this.x+this.y);}}var c = new C();c.m.call({x:100,y:100}); //200

call&apply第一个实参是要调用函数的母对象,会变为this的值。

函数.call(对象,参数1,参数2);

函数.apply(对象,[参数1,参数2]); //数组形式

补充:

function a(a,b,c,d){  //将伪数组转变为真数组  var args = [].slice.call(arguments);}

八、函数中this

function a(){console.log(this); //a {}function b(){console.log(this); //window}b();}new a();

特别注意:函数内部函数this指向window

此问题在严格模式已被修改;在非严格模式中,可使用变量接收外部函数this供内部函数使用,如var that = this;

九、回调(函数当参数)

function a(callback){callback();}a(function(){console.log('aaa');});

更加灵活,主页面只需为子页面提供对应接口,具体处理逻辑全部由子页面处理。

关于“JavaScript函数及prototype怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: JavaScript函数及prototype怎么使用

本文链接: https://www.lsjlt.com/news/351537.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript函数及prototype怎么使用
    这篇文章主要介绍“JavaScript函数及prototype怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript函数及prototype怎么使用”文章能帮助大家解决问题。一、...
    99+
    2023-07-05
  • JavaScript函数及其prototype详解
    目录一、定义二、函数执行三、函数是对象[typeof instanceof]四、prototype五、实例方法&静态方法六、闭包七、通过调用方法的形式来间接调用函数:appl...
    99+
    2023-03-14
    javascript prototype详解 Javascript prototype理解 js中prototype的作用
  • 怎么使用Javascript的prototype链
    这篇文章主要介绍“怎么使用Javascript的prototype链”,在日常操作中,相信很多人在怎么使用Javascript的prototype链问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Jav...
    99+
    2023-06-17
  • JavaScript原型Prototype怎么使用
    这篇文章主要讲解了“JavaScript原型Prototype怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript原型Prototype怎么使用”吧!1、概述1.1原型...
    99+
    2023-06-21
  • JS中prototype怎么使用
    在 JavaScript 中,每个对象都有一个 `prototype` 属性,可以通过 `Object.prototype` 来访问...
    99+
    2023-08-18
    JS prototype
  • 一文详解JavaScript中prototype的使用
    目录prototype初步认识函数有prototype属性,函数创建的对象没有获得当前对象的属性父和子的扩展子的proto和prototype的区别扩展得到的东西到底从哪来的prot...
    99+
    2024-04-02
  • Javascript中三个取整函数是什么及怎么使用
    今天小编给大家分享一下Javascript中三个取整函数是什么及怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获...
    99+
    2024-04-02
  • javascript中prototype方法有什么用
    这篇文章主要为大家展示了“javascript中prototype方法有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中prototy...
    99+
    2024-04-02
  • JavaScript的Promise函数怎么使用
    这篇文章主要介绍“JavaScript的Promise函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript的Promise函数怎么使用”文...
    99+
    2024-04-02
  • JavaScript异步函数怎么使用
    这篇文章主要介绍了JavaScript异步函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript异步函数怎么使用文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • JavaScript组合函数怎么使用
    这篇文章主要讲解了“JavaScript组合函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript组合函数怎么使用”吧!如果没有组合函数 compose,函数连续调用...
    99+
    2023-07-02
  • javascript递归函数怎么使用
    这期内容当中小编将会给大家带来有关javascript递归函数怎么使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、说明所有递归函数都有一个通用模式 。它们总是由一个调用自身的递归部分和一个不调用自身...
    99+
    2023-06-15
  • JavaScript日期函数怎么使用
    这篇文章主要讲解了“JavaScript日期函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript日期函数怎么使用”吧!javascript时间函数javascrip...
    99+
    2023-06-26
  • javascript中XmlHttp.open函数怎么使用
    在JavaScript中,`XmlHttp.open()`函数用于创建一个新的XMLHttpRequest对象,并指定要发送的请求的...
    99+
    2023-09-14
    javascript
  • JavaScript Boolean prototype属性有什么用
    JavaScript中的Boolean构造函数有一个名为prototype的属性,它是一个对象,它允许您向Boolean对象添加新的...
    99+
    2023-10-11
    JavaScript
  • JavaScript Date prototype属性有什么用
    JavaScript 中的 Date 对象是用于处理日期和时间的对象。 Date 对象有很多方法和属性可以进行日期和时间的操作。其中...
    99+
    2023-10-12
    JavaScript
  • JavaScript数组操作函数怎么使用
    这篇文章主要介绍“JavaScript数组操作函数怎么使用”,在日常操作中,相信很多人在JavaScript数组操作函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • JavaScript函数怎么定义和使用
    本文小编为大家详细介绍“JavaScript函数怎么定义和使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript函数怎么定义和使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.用函数语句定义...
    99+
    2023-07-02
  • JavaScript函数怎么封装和使用
    本篇内容主要讲解“JavaScript函数怎么封装和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript函数怎么封装和使用”吧!1、函数函数:...
    99+
    2024-04-02
  • javascript中的replace函数怎么使用
    在JavaScript中,可以使用`replace()`函数来替换字符串中的内容。`replace()`函数接受两个参数:要替换的内...
    99+
    2023-08-18
    javascript replace
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作