`

JavaScript 学习笔记九 new和apply,call

 
阅读更多

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方法

    两者实现的功能是完全一样的,只是参数传递方式不一样,call是将各个参数以逗号(,)隔开,而apply是将所有参数组成一个数组进行传递。

    JavaScript-学习笔记.docx

    自己学习笔记。视频:腾讯课堂:渡一教育 内容大纲: 预编译: 函数 闭包问题 对象 原型、原型链、call、apply 继承模式 对象克隆 数组 类数组 数组去重 自定义type方法(类似于typeof) try-catch es5.0严格模式 ...

    Javascript中call与apply的学习笔记

    注:该方法的作用和 apply() 方法类似,只有一个区别,就是call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。 语法 fun.call(thisArg[, arg1[, arg2[, ...]]]) 参数 thisArg 在...

    有关JavaScript中call()和apply() 的一些理解

    然后度娘谷哥一番,也发现好多达人写出了自己的理解和笔记,但始终还是云里雾里,于是去W3C学习了下 在W3C网上研究这两个方法的时候,看到一个词语,叫“对象冒充”,这个概念本人觉得还是挺重要的,让我对这两个...

    关于JavaScript继承的学习笔记

    ①了解js继承方法之前要了解js的原型和原型链,可以参考关于JavaScript原型的学习笔记 ②call和apply方法的运用 function Person(name,age) { this.name = name; this.age = age; } function Pp(name,age,sex) ...

    JavaScript高级程序设计学习笔记(四)

    上半部分的笔记可以浏览JavaScript高级程序设计学习笔记(三) 以下的笔记是书上一些我以前学习的时候,没有太重视的js基础知识,也有一些面试知识的拓展,通过博客回顾并加深理解。 文章目录第五章(下)引用类型...

    Front-end-base:前端学习笔记

    Front-end-base前端学习笔记功能篇用处:防止频繁提交表单,让单次事件多次触发设置时间管理员 timer,初始 timer 为 null,后面使用 clearTimeout 清空之前的内容(apply 是立即执行)。timer 就像一个水龙头,对...

    整理后java开发全套达内学习笔记(含练习)

    BufferedReader s = new BufferedReader(new InputStreamReader(System.in)); String next; try{next = s.readLine();//此语句会抛异常,需处理 System.out.println("您输入了文字:" + next); }catch...

Global site tag (gtag.js) - Google Analytics