Javascript权威指南学习总结

1. 函数的定义总是覆盖变量的定义

function f(){

    alert( 1111 );

}

var f = 1;

alert( f );

此时输出的是1111

2. 函数变量的作用域不管定义在函数体内任何地方,都将是作用于整个函数体内

var x = 1;

function f(){

    alert( x );

    var x = 2;

}

f();

输出undefine,JS变量是在预编译期定义的,所以一开始全局变量x 和 局部变量x都已经被解析,函数体内此时的x的值是undefined.

3. hasOwnProperty isPrototypeOf constructor 区别

hasOwnProperty ( obj1.hasOwnProperty( '属性或方法' ) ) 判断属性、方法是否是某个对象的实际属性或方法而非继承来的.

var o = new Object();

o.name = 1;

alert( o.hasOwnProperty('name') );

// 输出 true 表示name是o的实际属性,非继承属性.

isPrototypeOf ( obj2.isPrototypeOf( obj1 ) ) 判断obj2是否在obj1的原型链上;

function o(){ // }

var obj = new o();

alert( o.prototype.isPrototypeOf( obj ) );

// 输出true 表示 o.prototype 在 obj的原型链上

constructor ( obj.constructor ) 返回对象的构造函数.

function o(){ // }

var obj = new o();

alert( obj.constructor ); // 输出o.

4. 构造函数里的成员 和 prototype 区别

定义在构造函数里的成员在每次构造实例的时,会把所有的成员重新定义在该实例上.

function o(){

    this.name = 1;

}

var obj = new o();

alert( obj.hasOwnProperty( 'name' ) );

// 输出true 说明 obj 已经有了非继承的属性name;

定义在 property 里的成员 是继承给实例对象的,实例对象本身并没有 name 属性

function o(){

    // 构造函数

}

o.prototype = {

    name : 1

}

var obj = new o();

alert( obj.hasOwnProperty( 'name' ) );

// 输出 false 说明 obj 的name属性是继承来的而不是本身实际有的name属性.

5. Image对象 图片缓存

1. 使用方法

var i = new Image();    

// 创建Image实例用于预加载图片

i.src = '1.jpg';    

// 此时完成1.jpg的预加载

// 当执行img的src时 如果i的图片加载完,则直接调用。

2. Image对象的方法

var i = new Image();

// onload 方法表示图片是否加载完成

i.onload = function (){

}

3.Image对象的属性 complete ,当complete值为false时表示图片的onload未执行,即img未加载完。当图片加载完成时,complete的值为true ( 前提是未调用Image对象的onerror和onabort事件,因为调用了这3个事件的任何一个complete的值都将边为true )

例子: 图片加载未完成时,可以载入一个加载中的gif动画,等img.onload事件执行时再加载图片.

window.onload = function (){

  var i = new Image();    

i.src = 'a.jpg';    

if(!i.complete){       

img.src='x.gif';     

}     

i.onload = function (){        

img.src=i.src;    

}

}

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2017-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从零开始学自动化测试

python笔记21-列表生成式

python里面[]表示一个列表,快速生成一个列表可以用range()函数来生成。 对列表里面的数据进行运算和操作,生成新的列表最高效快速的办法,那就是列表生成...

1001
来自专栏C语言及其他语言

【优秀题解】1168题【简单计算】题解

题目描述 有一个n+2个元素a[0], a[1], ..., a[n+1] (n <= 3000, -1000 <= a[i] <=1000)构成的数列. 已...

34310
来自专栏苦逼的码农

每日一题1:回文整数

分析:有人可能会把它转化为字符串,然后在来逐一比较,显然这在处理速度上是比较慢的。下面是我推荐的两种做法:

653
来自专栏练小习的专栏

border的transparent与rgba(0)的区别是什么?

在用after和before做一个小的tips箭头的时候,发现一个很蛋疼的问题,boeder写成transparent和写成rgb(x,x,x,0),在webk...

16910
来自专栏liuchengxu

Vim 文本对象指南 (2)

接 Vim 文本对象 (1), 关于插件使用, 可以查看完整配置 space-vim.

392
来自专栏海天一树

小朋友学Python(4):缩进

学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模...

2547
来自专栏Nian糕的私人厨房

JavaScript 基础

JavaScript 是一种轻量级,解释型的,有着函数优先 (First-class Function) 的编程语言,虽然它是作为开发 WEB 页面的脚本语言而...

845
来自专栏前端儿

VF

Vasya is the beginning mathematician. He decided to make an important contributi...

571
来自专栏程序员互动联盟

【答疑解惑】如何确定当前系统的大小端?

上周写过一个什么是大小端的答疑解惑,今天接着说如何使用C语言来确定当前系统的大小端,下面介绍两种有效的方法。 方法1:利用union类型 —— 可以利用unio...

1914
来自专栏web前端教室

大白话-prototype属性

今天来聊聊javascript的prototype, ==========先说结论========= --它是什么呢? 它是一个属性。 --谁的属性? 函数的...

1859

扫描关注云+社区