关于javascript中的构造函数和普通函数探索 [转]
这是第一篇关于javascript模块的文章,在javascript入门的目录下,主要是记录一些对网上精彩的js研读碰到的疑惑,并做一些实验和探索
<script type="text/javascript">
function fun(){
alert("good");
var age = 1;
this.name = 'Mr S.G';
this.method = fun2;
}
function fun2(){
alert("this is the second method show");
}
function fun1(){
var obj = new fun();
alert(obj.name);
obj.method();
alert(obj.age);
}
window.onload = fun1;
</script>
fun()创建了一个对象。 fun() 是一个特殊的函数 构造函数,它和普通的函数有什么区别和联系我将在下边谈论。
注意到上边有两种形式定义变量。this.name 和 var age
.其实通过this方式创建的变量叫做对象的成员变量,可以在外部通过对象引用。而 var age 是一个局部变量 (如果放到外层,是一个全局变量)
这个变量不能被对象在外部引用(如obj.age)否则是undefine,可以将它看成是一个对象的私有成员变量。
obj = new
fun()这一步后,记录现场,然后跳到fun()的构造函数中,执行alert("good")跳出对话框。接下来就是创建成员变量了(如java
中在堆中创建内存空间,创建栈)。 好了fun()执行完了,回到fun1(),执行下去。注意一点,alert(obj.age)是undefine.
<script type="text/javascript">
function fun2(){
alert("this is the second method show"); }
function fun1(){
var obj = new fun2();
alert(obj);
alert('if display there no erro through the call');
}
window.onload = fun1;
</script>
fun2()是一个函数,但是它是构造函数吗?
你可以将它当做一个构造函数。这里会发现fun1()中的alert()可以正常执行。这里可以总结为任何函数都可以new,在js中函数就是对象。但是
试想一下这里new有意义吗? fun2()中没有变量,或者都是var 定义的变量,那么在外部引用不了。new它干嘛呢?
,还不如让fun2()作为全局函数执行好了。
//任何函数可以new 创建一个对象
(2). 当一个函数使用call或者apply调用时,给定的第一个参数即为上下文;
(3). 否则,如果一个函数作为一个对象的属性(obj.func)或者obj['func'])来调用时,它就把该对象作为上下文来运行;
(4)如果与上述几条都不符的话,则函数将在全局上下文中运行。
那么普通方法也可以算是构造函数,那么我在普通方法中在写方法,方法的嵌套。行不行?
<script type="text/javascript">
function fun2(){
var name = "Mr S.G";
var method = function(){
alert("define a function");
}
alert(method);
method();
}
function fun1(){
var obj = new fun2();
alert(obj);
alert('if display there no erro through the call');
}
window.onload = fun1;
</script>
额,为什么我称fun2()是一个普通的函数呢?因为它没有this.这个是按照自己的理解来命名的。 这里fun2()定义一个匿名函数,由method引用。method()进行调用。 这里行的通。
下面我要变一下了。我要让fun2()的method能在fun1()调用,该怎么办?
<script type="text/javascript">
function fun2(){
var name = "Mr S.G";
var method = function(){
alert("define a function");
}
alert(method);
this.fun3 = method;
}
function fun1(){
var obj = new fun2();
obj.fun3();
alert(obj);
alert('if display there no erro through the call');
}
window.onload = fun1;
</script>
关于javascript中的构造函数和普通函数探索 [转]的更多相关文章
- JavaScript中的构造函数和工厂函数说明
在cnblog上看到一篇文章,讲解JS中的构造函数和工厂函数,觉得讲的真好 JavaScript中的工厂函数和构造函数都能用来创建一个对象,我们可以来看看下面的例子 构造函数 function cre ...
- JavaScript中常见的数组操作函数及用法
JavaScript中常见的数组操作函数及用法 昨天写了个帖子,汇总了下常见的JavaScript中的字符串操作函数及用法.今天正好有时间,也去把JavaScript中常见的数组操作函数及用法总结一下 ...
- JavaScript中常见的字符串操作函数及用法
JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...
- 一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...
- JavaScript中的构造函数和原型!
JavaScript中的原型! 原型的内容是涉及到JavaScript中的构造函数的 每一个构造函数都有一个原型对象!prototype 他的作用是 共享方法!还可以扩展内置对象[对原来的内置对象进行 ...
- JavaScript中以构造函数的方式调用函数
转自:http://www.cnblogs.com/Saints/p/6012188.html 构造器函数(Constructor functions)的定义和任何其它函数一样,我们可以使用函数声明. ...
- JavaScript中的闭包和匿名函数
JavaScript中的匿名函数及函数的闭包 1.匿名函数 2.闭包 3.举例 4.注意 1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没 ...
- JavaScript中的构造函数
目录: constructor & prototype 为构造函数添加属性和方法的多种不同方法 组合使用this和prototype关键字创建构造函数(常用方法) 用对象直接量作为构造函数的参 ...
- JavaScript中为什么使用立即执行函数来封装模块?
最近在学习JavaScript基础,在学习到面向对象编程时,学习到在JavaScript中实现模块化的方法,其中一个重要的点是如何封装私有变量. 实现封装私有变量的方法主要是: 使用构造函数 func ...
随机推荐
- git 日常 常用命令
初始化git git init 第一次拉代码: 方式1:git clone git clone https://git.oschina.net/*****.git (https远程仓库地址) 方式2: ...
- CentOS7 利用systemctl添加自定义系统服务
一.命令systemctl介绍 CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 命 ...
- Java常用类库API之MD5简单使用
常用类库--MD5简单使用 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash v ...
- js arguments参数
在调用函数时,浏览器每次都会传递进两个隐含的参数: 1.函数的上下文对象 this 2.封装实参的对象 arguments - arguments是一个类数组对象, ...
- php array_chunk()函数 语法
php array_chunk()函数 语法 作用:把数组分割为新的数组块.dd马达参数 语法:array_chunk(array,size,preserve_key) 参数: 参数 描述 array ...
- luoguP2365 任务安排 斜率优化 + 动态规划
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- Cluster基础(五):配置tracker、配置storage、文件测试及web访问
一.配置tracker 目标: FastDFS是一个分布式文件系统,主要的服务器角色有Tracker和Storage.本例安装一台Tracker,实现以下功能: 接受客户端的访问 检索存储节点,为客户 ...
- css中div垂直居中的方法。
利用绝对定位实现的居中 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- 【进阶技术】一篇文章搞掂:RibbitMQ
一.简介 一开始,消息队列源自于一个激进的工程师的思想,他希望有一种通用软件“总线”能解决程序间繁重的信息通信工作 后来出现了很多消息队列产品,但是他们互不兼容,价格昂贵 后来出现了AMQP,高级消息 ...
- Mac定制终端:iTerm2 + zsh + powerline
原始界面: 配置后的界面: 安装iTerm2 可以直接去官网下载:https://www.iterm2.com/ 下载后直接安装即可 安装主题 所有主题:https://iterm2color ...