一、js中function的不同形态

  js中类和函数都要通过function关键字来构建。

1、js中当函数名大写时,一般是当作类来处理

function Foo(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
console.log(this.name)
}
} obj = new Foo('文州', 19); // 实例化一个对象
obj.getName(); // 输出:文州

2、js中函数名小写,当做函数来处理

function test() {
console.log(this);
}
// 等同于window.test,因此这里的this代指的是window
test(); // 输出:Window

3、自执行函数,同上面等价

  自执行函数,同上面等价,this也是代指的window。

(function () {
console.log(this); // 输出:Window 
})()

二、复合案例

1、类和函数结合案例

var name = '景女神';
function Foo(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
console.log(this.name); // 文州
(function () {
console.log(this.name); // 景女神(打印的外部全局变量)
})()
}
} obj = new Foo('文州', 19);
obj.getName(); // 文州 景女神

  生成对象后,对象执行getName方法,此时this.name是输出的当前对象的name,因此是输出文州。随后再执行自执行函数,这里的this指代的是window对象,获取全局name变量,因此输出景女神。

2、让上例中自执行函数也打印对象的name

var name = '景女神';
function Foo(name, age) {
this.name = name;
this.age = age;
this.getName = function () {
console.log(this.name); // 文州
var that = this;
(function () {
console.log(that.name); // 文州(打印的外部全局变量)
})()
}
} obj = new Foo('文州', 19);
obj.getName(); // 文州 文州

3、自动实例化案例

obj = {
name: '文州',
age: 19,
getName:function () {
console.log(this.name); // 文州
var that = this;
(function () {
console.log(that.name); // 文州
})()
}
}
obj.getName();

  

最新文章

  1. Xamarin.Android活动的生命周期
  2. 手机响应式js轮播基础
  3. ubuntu 下非交互式执行远程shell命令
  4. 转一篇关于Unity的PlayMaker
  5. wampserver 2.5安装pear win8.1
  6. Joda-time是java处理时间非常棒的jar
  7. Excel去重
  8. Windows Azure 使用体验
  9. 微信公众号开发第二课 百度BAE搭建和数据库使用
  10. 匹配 prev 元素之后的所有 siblings 元素
  11. hdu 5317 RGCDQ(前缀和)
  12. java_spring_依赖注入(构造器)
  13. JAXB - Hello World with Namespace
  14. Keil C51编译及连接技术
  15. if最简单的用法
  16. Users is not mapped(Hibernate实体类采用注解)
  17. CoreAnimation 视觉效果
  18. Spring中Quartz的配置及corn表达式
  19. window上杀死node进程
  20. 了解AutoCAD对象层次结构 —— 3 ——数据库

热门文章

  1. 一道组合数问题--出自 曹钦翔_wc2012组合计数与动态规划
  2. PHP简单实现一言 / 随机一句功能
  3. 洛谷P2800 又上锁妖塔
  4. mysql5.6 的st_distance 实现按照距离远近排序。
  5. 洛谷P2146 [NOI2015]软件包管理器
  6. DenyHosts 阻止SSH暴力攻击
  7. 2019.3.13 final与static
  8. Python爬虫常用之HtmlParser
  9. maven的resources插件
  10. mysql大数据表删除操作锁表,导致其他线程等待锁超时(Lock wait timeout exceeded; try restarting transaction;)