function logs(obj){document.write(obj+"<br/>");}
//new 操作
function Shape(type){
this.type = type || "rect";
this.calc = function (){
return "calc,"+this.type;
}
}
//通过 new 操作符来作用与一个函数
//首先,创建一个空对象
//然后用函数的 apply 方法,将这个空对象传入作为 apply 的第一个参数,及上下文参数。
//这样函数内部的 this 将会被这个空的对象所替代
var triangle1 = new Shape("triangle");
logs(triangle1.calc());
// 上面的操作如下 同样效果
var triangle2 = {};
Shape.apply(triangle2,["trangle2"]);
logs(triangle2.calc());
//区分apply,call就一句话,
//foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments)==this.foo(arg1, arg2, arg3)
//call, apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,
//所以每个Function对象实例,也就是每个方法都有call, apply属性.既然作为方法的属性,那它们的使用就当然是针
//对方法的了.这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同
//相同点:两个方法产生的作用是完全一样的
//不同点:方法传递的参数不同
//当参数明确时可用call, 当参数不明确时可用apply给合arguments
//http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html
//下面记住两点
//1. 所有的变量声明都在范围作用域的顶部
//2. 所有的全局变量都是window的属性
//如下1:
if (!("a" in window)) { var a = 1; }
logs(a);//undefined
//如下2:
logs("a" in window);//true 尽管a是后来申请的,
//但JavaScript引擎首先会扫墓所有的变量声明,然后将这些变量声明移动到顶部
var a;
//1.函数声明也是提前的,所有的函数声明都在执行代码之前都已经完成了声明
function functionName(arg1,arg2){}
//2.函数表达式没有提前,就相当于平时的变量赋值
var functionName = function(arg1,arg2){}
//3.函数声明会覆盖变量声明,但不会覆盖变量赋值
function value (){ return 1;}
var value; logs(typeof value);//function 覆盖变量声明
var value = 1; logs(typeof value);//number 不会覆盖变量赋值
分享到:
相关推荐
为了进一步控制函数执行的上下文,JavaScript提供了特殊的内置方法,即call和apply方法,这两个方法都是Function对象的方法,可以用来在特定的作用域中调用函数,即改变函数体内this的指向。 call和apply方法的主要...
根据提供的文件信息,可以看出这份“我的javascript学习笔记”主要涵盖了JavaScript中的几个关键概念和技术要点,包括正则表达式、AJAX以及一些JavaScript的核心语言特性。接下来将这些知识点进行详细的整理和解释。...
### JavaScript中call与apply方法的学习笔记 在JavaScript编程中,`call`和`apply`是两个非常重要的方法,它们都是`Function`原型上的方法,用于改变函数的`this`上下文(即函数体内`this`的指向)到指定的对象,并...
JavaScript是一种广泛应用...以上就是JavaScript学习笔记中的主要知识点,理解和掌握这些内容对于深入学习JavaScript至关重要。在实际编程中,还需要结合具体的场景灵活运用,并不断实践和探索更高级的特性和最佳实践。
个人在学习前端JavaScript时的学习笔记,内含JavaScript的中基础知识点,以及案例。里面有兼容市面上浏览器的方法 1.知识点包括:基础语法,字符串操作,object对象,DOM对象,BOM对象,offset,client,scroll对象...
例如,通过`call()`或`apply()`方法,我们可以将构造函数应用于已存在的对象,这样就避免了重复创建`new Object()`,从而节省资源: ```javascript function objectFun(name) { this.name = name; this.say = ...
总结,JavaScript的高级学习涵盖了函数的多种定义方式,`this`的关键字用法,以及通过`call`、`apply`和`bind`来控制函数调用时的上下文。理解和熟练掌握这些知识点,对于成为一位出色的JavaScript开发者至关重要。
5. `new`操作符、`call`、`apply`和`bind`可以显式地设置`this`的值。 其次,事件对象(Event Object)在JavaScript的事件处理中扮演重要角色。它包含了与特定事件相关的所有信息,如事件类型、目标元素、鼠标位置...
JavaScript中的`bind()`, `call()`, 和 `apply()`方法都可以做到这一点。这三个方法都接收一个上下文对象作为第一个参数,使得`this`在调用函数时指向这个对象。`call()`和`apply()`的主要区别在于传递参数的方式:`...
本篇学习笔记主要探讨了两种继承机制:原型链继承和借用构造函数。 1. **原型链继承**: - 在JavaScript中,每个对象都有一个`__proto__`属性,指向其构造函数的`prototype`对象。当尝试访问对象的一个属性或方法...
总结来说,这篇学习笔记揭示了在编写JavaScript时如何处理事件绑定和上下文(`this`)的问题,以及如何解决`setInterval`在不同浏览器中的兼容性问题。这些问题在实际开发中非常常见,理解并掌握这些技巧对于编写...
在JavaScript中还存在call和apply这两种方法,它们是Function原型链上的方法,允许我们指定一个this值以及参数来调用一个函数。call方法可以接受多个参数,而apply方法则接收一个参数数组。虽然它们在很多方面的作用...
①了解js继承方法之前要了解js的原型和原型链,可以参考关于JavaScript原型的学习笔记 ②call和apply方法的运用 function Person(name,age) { this.name = name; this.age = age; } function Pp(name,age,sex) ...
通过apply()和call()方法,可以模拟多重继承的效果,实现代码的复用,增强函数的灵活性和扩展性。在实际应用中,这种改变函数作用域的方式尤其有用,如文档中所示,通过call()方法可以改变sayColor()函数内部的this...
4. **this绑定**:this的值取决于函数调用方式,可以是默认绑定、隐式绑定、显式绑定(call/apply/bind)或new绑定。 二、函数式编程 5. **高阶函数**:可以接收函数作为参数或者返回函数的函数,如map、reduce、...
通过构造函数创建对象,通过原型链实现继承,使用call()、apply()或bind()方法改变函数的上下文,以及利用new关键字创建实例,都是JavaScript中实现面向对象编程的关键技术。 总之,这份笔记归类详尽地梳理了...
JavaScript中的函数记忆是一种优化技术,它通过存储函数的先前计算结果来提高性能。函数记忆的主要思想是,如果一个函数被多次调用,并且每次调用的参数相同,那么第二次及之后的调用可以直接从缓存中获取结果,而...