首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

JS高级原型以及函数调用方式

根据函数内部this的指向不同,可以将函数调用模式分成4种 函数调用模式 方法调用模式 构造函数调用模式 上下文调用模式(借用方法模式函数调用模式 如果一个函数不是一个对象的属性,就是被当做一个函数来进行调用的...此时this指向了window function fn(){ console.log(this);// 指向window } fn(); 方法调用模式 当一个函数被保存为对象的一个属性,我们称之为一个方法...} } obj.sayHi(); 构造函数调用模式 如果函数是通过new关键字进行调用的,此时this被绑定到创建出来的新对象上。...看这个函数是怎么调用的,处于什么调用模式 // 1 var age = 38; var obj = { age: 18, getAge: function () { console.log...this.age); } Fn(); // 张三 1 // 返回值:新的函数 // 参数:新函数的this指向,当绑定了新函数的this指向后,无论使用何种调用模式,this都不会改变。

7510

Js 使用new关键字调用函数和直接调用函数的区别

,并以相应的属性和方法初始化该对象,然后又返回了这个对象,除了使用new操作符且把使用的包装函数叫做构造函数之外,这个模式跟工厂模式是一模一样的。...person.sayName(); 得出结论:使用new关键字是将函数当作构造函数调用,即为构造对象,若没有人为的重写调用构造函数返回的值,那么返回的对象是由解析器自己生成的。...不使用new关键字调用函数,即为普通函数调用。 随即想到若是函数返回值是function型的呢?...最后得出一个猜测: 如果函数返回值为常规意义上的值类型(Number、String、Boolean),new 函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object、Array、Function...),虽然new函数与直接调用函数产生的结果等同,但是是两个不同的过程,一个是构造对象、一个是函数调用

3.6K10

js匿名函数和命名函数_jsp调用java方法

由衷的感叹,js真是烦。 学到现在,渐渐理解了什么是:语言都是通用的,没有好不好,只有擅长不擅长。...温故知新,今天又回味了一遍,匿名函数作为函数参数。 代码很短,五脏俱全。...难道匿名函数自执行了? 错!!!匿名函数!=自执行匿名函数 真相只有1个:匿名函数作为参数,在调用(将匿名函数作为参数的)函数里被调用执行了。...function test( a, b ){ a+=1; // b是对象,函数名也是对象,所以b可以指代一个函数 // 类似c++中的函数名一样 // a被复制给了b(result) // js好灵活...b(a); } 以上这篇js匿名函数作为函数参数详解就是小编分享给大家的全部内容了,希望能给大家一个参考。

6.2K20

前端day19-JS高级(函数调用的上下文模式)学习笔记

01-函数的三种调用方式(this关键字) 1.1复习函数三种调用方式:普通函数 对象方法 构造函数(理解this关键字作用:谁调用这个函数,this指向谁) a.全局函数:this指向window b...console.log(age);//35 02-函数调用的上下文模式 2.1-函数执行的上下文模式 作用:可以动态修改函数中的this指向 函数上下文的三个方法:call()、apply...)语法并不会立即执行函数,而是返回一个修改指向后的新函数,常用于回调函数 /* 2.函数上下文模式: 2.1作用...}.bind({name:'李四'}),2000); 2.2-函数调用上下文模式注意点 /* 1....fn.call(undefined); fn.call(null); fn.call(); fn.call(window); 2.3-函数调用的上下文模式案例

1.2K10

JS 匿名函数——几种不同的调用方式

声明:var func=function(){ } 调用:func(); var show = function(){ alert('hello'); }; show(); 注意:使用匿名函数表达式...,函数调用语句,必须放在函数声明语句之后!!!...原因:检查装载,会先对show变量及这个匿名函数声明,此时,还未将匿名函数赋值给show变量,如果在表达式之前调用,会报错 show is not a function js代码的执行顺序问题 js...检查装载阶段:会先检测代码的语法错误,进行变量、函数的声明 执行阶段:变量的赋值、函数调用等,都属于执行阶段。 3.自执行函数。这里我总结了8种常用的匿名函数调用方法: //1.使用 !...(function(){ document.write('wo hao'); })(); //3.能够将匿名函数调用的()为一个整体,官方推荐使用; (function(){ document.write

4K10

JS 利用高阶函数实现函数缓存(备忘模式)

高阶函数 高阶函数就是那种输入参数里面有一个或者多个函数,输出也是函数函数,这个在js里面主要是利用闭包实现的,最简单的就是经常看到的在一个函数内部输出另一个函数,比如 var test = function...} } var adder = add(); adder(1); // 1 adder(2); // 3 这样的话就会在之前运算结果基础上继续运算,意思就是这两个 adder 运行的时候都是调用的同一个...高阶函数实现缓存(备忘模式) 比如有个函数: var add = function(a) { return a + 1; } 每次运行add(1)的时候都会输出2,但是输入1每次还是会计算一下1...抽象工厂模式 JS 工厂模式 JS 建造者模式 JS 原型模式 JS 单例模式 JS 回调模式 JS 外观模式 JS 适配器模式 JS 利用高阶函数实现函数缓存(备忘模式) JS 状态模式 JS 桥接模式...JS 观察者模式 网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程中的总结,如果发现错误,欢迎留言指出~ 参考: P78

2.6K30

js 函数如何实现策略模式与状态模式

前言 有关设计模式的学习资料中,大部分都是以 java 语言实现的,毕竟 java 作为老牌面向对象的语言最能说明设计模式的核心概念,所以 js 的相关设计模式的学习资料也大多使用 class 类实现...,本文记录下 js 使用函数实现策略模式和状态模式设计模式的方式,更有助于理解策略模式和状态模式如何在实际工作中运用。...: 代码会增加许多策略类和策略对象 需要全面了解各种 stragety, stragety要向客户暴露它的所有实现,违反最少知识原则 状态模式 允许一个对象在其内部状态改变改变它的行为,对象看起来似乎修改了它的类...Context 中的请求动作和状态类中封装的行为可以非常容易地独立变化而互不影响 缺点: 会在系统中定义许多状态类,而且系统中会因此而增加不少对象          性能优化点 1、仅当 state 对象被需要才创建并随后销毁...this, FSM.off); this.onState = delegate(this, FSM.on); this.currState = this.offState; // 设置初始状态为关闭状态

18610

js之工厂构造函数模式

在这里,我们首先来谈谈他们 这个类的构造将在下一章中描述,但是在JavaScript中它是一个“语法糖”,是我们在这里学习的一种模式的扩展 功能类模式 根据定义,下面的构造器函数可以被认为是“类 /*...它遵循定义的所有部分 它是一个用于创建对象的“程序代码模板”(可以用new来调用) 它提供了状态的初始值(参数名称) 它提供了方法(sayHi) 这被称为功能类模式函数模式中,用户内部的局部变量和嵌套函数...alert(`${name},age:${calcAge()}`); } } } let user = User("john",new Date(2000,0,1)); // 函数名的调用...原型模式更强大,更高效,所以它建议坚持下去 根据原型模式 方法存储在Class.prototype中 原型相互继承 总结 在本节当中,主要讲的是工厂构造函数模式,用于创建对象的模板,其中模板可以粗俗的理解模具...,一是为了减少内存的开销,提高性能,另一方面是为了拓展,当需要在代码的其余所有部分通过屏蔽较为复杂的的对象创建方法来简化某些特定对象的创建过程,使用工厂模式最为合适,其实它也就是面向对象的一种写法 以下为文中的一些陌生词汇

1.2K20

js 推断 当页面无法回退(history.go(-1)),关闭网页

在做一个Web项目遇到一个需求,当页面没有前驱历史记录(就是当前为新弹出的页面,没法做goback操作即history.go(-1)),点击返回button直接关闭页面,否则就退回到前一页。...遇到的问题就是怎样推断 是否有history能够回退,这个很麻烦,由于没有这种函数直接能获取到。仅仅能通过history.length这个变量做变通的处理。可是对于IE。...因此写了一个函数实现前面所需求的这个功能。分享给大家。 /** * 返回前一页(或关闭本页面) * 假设没有前一页历史。...则直接关闭当前页面 */ function goBack(){ if ((navigator.userAgent.indexOf('MSIE') >= 0) && (navigator.userAgent.indexOf

3K10
领券