函数调用、方法调用及构造函数调用之间的不同
来源:互联网 发布:淘宝如何设置分享有赏 编辑:程序博客网 时间:2024/06/05 14:56
最简单的使用模式是函数调用:
function hello(username){return "hello,"+username;}hello("Keyser Soze");//"hello,Keyser Soze"
第二种使用模式是方法调用。JavaScript中的方法不过是对象的属性恰好是函数而已。
var obj ={hello:function(){return"hello,"+this.username;},username:"Hans Gruber"};obj.hello();//"hello,Hans Gruber"
var obj2={ hello:obj.hello, username:"Boo Radley"};obj2.hello();//"hello,Boo Radley"事实是,在方法调用中是由调用表达式自身来确定this变量的绑定,绑定到this变量的对象被称为调用接收者。表达式obj.hello()在obj对象中查找名为hello的属性,并将obj对象作为接收者,然后调用该属性。表达式obj2.hello()在obj2对象中查找名为hello的属性,恰好正是obj.hello函数,但是接收者是obj2对象,通常,通过某个对象调用方法将查找该方法并将该对象作为该方法的接收者。
由于方法其实就是通过特定对象调用的函数,但不知为何一个普通的函数不能引用this变量。
function hello(){return "hello,"+this.username;}
var obj1={hello:hello,username:"Gordon Gekko"};obj1.hello();//"hell"o,Groden Gekko"var obj2 ={hello:hello,username:"Biff Tannen"};obj2.hello();//"hello Biff Tannen"然而,使用了一个this变量的函数,比起作为方法被调用,将它作为函数被调用并不是特别有用。
hello();//"hello,undefinde"
一个 非方法的函数调用会将全局对象作为接收者,在这种情况下全局对象没有名为name的属性所以产生了undefined。如果方法中需要使用this变量,则将方法作为函数调用则毫无用处,因为没理由希望全局对象匹配调用对象中的方法。事实上,将this变量绑定到全局对象是没问题的,所以ES5的严格模式将this变量的默认绑定值改为undefined。
function hello(){"use strict";return "hello,"+this.username;}hello();//error:cannot read property "username" of undefined这有助于更快的捕获偶然的将方法错误的作为纯函数使用的情况。因为试图访问undefined的属性会立即抛出一个错误。
第三种用法是通过构造函数使用。
function User(name,passwordHash){this.name = name;this.passwordHash = passwordHash;}使用new操作符来调用User则视为构造函数。
var u = new User("sfalken","0effagsgfs143657fdgfddf1116796");u.name;//"sfalken"与函数调用和方法调用不同的是,构造函数调用将一个全新的对象作为this变量的值,并隐式返回这个新对象作为调用结果。构造函数的主要职责是初始化该新对象。
总结:
方法调用将被查找方法属性的对象作为调用接收者。
函数调用将全局对象作为其接收者,一般很少使用函数调用语法来调用方法。
构造函数需要通过new运算符调用,并产生一个新的对象作为其接收者。
阅读全文
0 0
- 函数调用、方法调用及构造函数调用之间的不同
- 构造函数之间调用
- 复制构造函数的不同调用
- JAVA C# 构造函数调互相调用(构造函数调用另一个构造函数)的不同
- 构造函数的调用
- 构造函数的调用
- 构造函数的调用
- 构造函数的调用
- 复制构造函数的定义及调用
- 8.1构造函数的分类及调用
- c#的构造函数及构造函数的调用
- 函数调用的时候出现不同的js调用方法
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序
- 不同 frame 之间调用 js 函数
- js中的4种函数调用模式:函数调用、方法调用、构造器调用、间接调用
- python中的生成器和迭代器
- 手机端网页自适应声明
- 2017年1000集大型Web前端视频教程
- 前端开发者必会的20个JavaScript试题
- 使用JavaMail群发邮件
- 函数调用、方法调用及构造函数调用之间的不同
- scala进阶
- poi读取excel(xls,xlsx)
- 设计模式之-外观模式
- java.lang包
- Android 文本输入框 获取焦点和设置光标到末尾
- 让IE6、IE7、IE8支持CSS3的圆角、阴影样式-最好的插件
- Cannot open Redis connection due invalid URI
- 三张图搞懂JavaScript的原型对象与原型链