JavaScript中Function函数与Object对象的关系


Posted in Javascript onDecember 17, 2015

Function是javascript里最常用的一个概念,javascript里的function是最容易入手的一个功能,但它也是javascript最难理解最难掌握的一个概念。

今天我们来尝试理解Function和Object.因为这个里面有些人前期可能会搞糊涂.他们之间到底是什么关系.当然也不除外当初的我.

注意:官方定义: 在Javascript中,每一个函数实际上都是一个函数对象.

我们先来看最简单的两个代码,也是最容易理解的.

function fn(){}
var obj = {}
console.log(fn instanceof Function)//true
console.log(obj instanceof Object)//true
console.log(fn instanceof Object)//true
console.log(obj instanceof Function)//false

前面两个打印的效果,大家都容易理解.后面 fn instanceof Object 是为true.这里也是一样,从函数的定义来说: 在javascript中一切函数实际都是函数对象. 所以为true就不奇怪了.obj instanceof Function 为false,当然不奇怪了.因为他是一个对象,不是函数.

我们再来看一个代码

console.log(Function instanceof Object); // true
console.log(Object instanceof Function); // true

代码很简单.运行结构两个都是为true,为什么呢? 第一个用函数的定义来说,(javascript中函数实际也是一个函数对象),当然为true,那第二个呢?对象也是函数?

Object也是函数.因为Object的结构是function Object(){native code}.

这种形式,很清晰的就是声明的一个Object函数,当然就是函数了,所以两个都是为true.

他们两个Function和Object函数实现代码,那当然是不一样了.他们是怎么实现的,那我们就不去详细琢磨了,如果想琢磨的,就可以了解浏览器的相关知识了.

ps:$(function(){})和$(document).ready(function(){})

document.ready和onload的区别——JavaScript文档加载完成事件

页面加载完成有两种事件

一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件)

二是onload,指示页面包含图片等文件在内的所有元素都加载完成。

用jQ的人很多人都是这么开始写脚本的:

$(function(){
// do something
});

其实这个就是jq ready()的简写,他等价于:

$(document).ready(function(){
//do something
})
//或者下面这个方法,jQuer的默认参数是:“document”;
$().ready(function(){
//do something
})

这个就是jq ready()的方法就是Dom Ready,他的作用或者意义就是:在DOM加载完成后就可以可以对DOM进行操作。

一般情况先一个页面响应加载的顺序是:域名解析-加载html-加载js和css-加载图片等其他信息。

那么Dom Ready应该在“加载js和css”和“加载图片等其他信息”之间,就可以操作Dom了。

1.window.onload方法

⑴执行时机:

在网页中所有元素(包括元素的所有关联文件)完全加载到浏览器后才执行,即JavaScript 此时可以访问网页中的所有元素。

window.onload=function(){ $(window).load(function(){
//编写代码 等价于 //编写代码
} });

⑵多次使用:

JavaScript的onload事件一次只能保存对一个函数的引用,他会自动用最后面的函数覆盖前面的函数。

function one()
{ alert("one");
} 
function two()
{ alert("two"); 
}
window.onload=one; 
window.onload=two; //运行代码后只有 two

2.$(document).ready()方法

⑴执行时机:在DOM完全就绪时就可以被调用。(这并不意味着这些元素关联的文件都已经下载完毕)

举个例子:$(document).ready()方法明知要DOM就绪就可以操作了,不需要等待所有图片下载完毕。

⑵多次使用:

function one(){ alert("one"); 
} 
function two(){ alert("two"); 
} $(document).ready(function()
{ one(); }); 
$(document).ready(function()
{ two(); 
}); //运行代码后 //先是:one //先是:two
Javascript 相关文章推荐
javascript 折半查找字符在数组中的位置(有序列表)
Dec 09 Javascript
js对数字的格式化使用说明
Jan 12 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
jQuery中:last-child选择器用法实例
Dec 31 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
Jun 29 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
Jul 18 Javascript
JavaScript动态检测密码强度原理及实现方法详解
Jun 11 Javascript
解决Can't find variable: SockJS vue项目的问题
Sep 22 Javascript
jQuery实现进度条效果代码
Dec 17 #Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 #Javascript
javascript日期格式化方法小结
Dec 17 #Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 #Javascript
js实现下拉列表选中某个值的方法(3种方法)
Dec 17 #Javascript
详解js图片轮播效果实现原理
Dec 17 #Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 #Javascript
You might like
php split汉字
2009/06/05 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
PHP设计模式(三)建造者模式Builder实例详解【创建型】
2020/05/02 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
优化javascript的执行速度
2010/01/23 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
js使用循环清空某个div中的input标签值
2014/09/29 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
nodejs实现简单的gulp打包
2017/12/21 NodeJs
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
JS实现的合并两个有序链表算法示例
2019/02/25 Javascript
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python编写一个闹钟功能
2017/07/11 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python软件都是免费的吗
2020/06/18 Python
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
乡镇干部先进事迹材料
2014/02/03 职场文书
军神教学反思
2014/02/04 职场文书
小学生手册家长评语
2014/04/16 职场文书
2014年团工作总结
2014/11/27 职场文书
先进工作者申报材料
2014/12/23 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
分析并发编程之LongAdder原理
2021/06/29 Java/Android
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL