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 相关文章推荐
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
Sep 06 Javascript
JS验证身份证有效性示例
Oct 11 Javascript
js实现兼容IE和FF的上下层的移动
May 04 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
Jul 27 Javascript
bootstrap table合并行数据并居中对齐效果
Oct 17 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
Apr 09 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
Jul 31 Javascript
JS实现简单九宫格抽奖
Jun 28 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初学入门
2006/11/19 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
Vue文本模糊匹配功能如何实现
2020/07/30 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
Django数据库操作的实例(增删改查)
2017/09/04 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python怎么判断素数
2020/07/01 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
傲盾软件面试题
2015/08/17 面试题
理工大学毕业生自荐信
2013/11/01 职场文书
会计专业的自荐信
2013/12/12 职场文书
会计工作决心书
2014/03/11 职场文书
副董事长岗位职责
2014/04/02 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
企业办公室主任岗位职责
2015/04/01 职场文书
村官2015年度工作总结
2015/10/14 职场文书
python中tkinter复选框使用操作
2021/11/11 Python