jQuery 中 .attr() 与 .prop() 的用法浅析

在 jQuery 1.6 以后的版本中,大多数属性可以使用.attr()获取,但是一些特殊情况,必须使用.prop()

参考链接:http://api.jquery.com/prop/ & .prop vs .attr()

第二个链接中有两点说出了attribute(特性)与 property(属性)的区别:

  1. attribute 的值只能是字符串,而 property 的值可以是任何类型,比如checked的 property 是布尔值,style的 property 是包含单个样式的对象,size的 property 是数字。
  2. 虽然一个元素的 attribute 与 property 有相同的名称,更新其中一个通过会更新另一个,但对于一input元素一些写入标签的特殊attribute,比如valuechecked,property 总是表示他的最新状态,而 attribute 表示的是写在代码文件中的初始值( attribute 中的valuechecked对应 property 中的defaultValuedefaultChecked

查看全文

JavaScript 中的存取器

在 ES5.1 中,定义了对象的两种存取器实现方式,对象直接量语法与Object.defineProperty()方法

直接量语法

定义存取器属性最简单的方法是使用对象直接量语法的一种扩展写法:

查看全文

JavaScript 的作用域链浅析

JavaScript 是基于词法作用域的语言:通过阅读包含变量定义在内的数行源代码就能知道变量的作用域。

一些类 C 的语言是使用块级作用域(block scope),花括号内的第一段代码都具有各自的作用域,而且变量在声明它们的代码之外是不可见的。

而 JavaScript 中没有块级作用域,取而代之地使用了函数作用域(function scope),即词法作用域:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义。词法作用域意味着变量在声明之前甚至已经可用,JavaScript的这个特性被非正式地称为声明提前(hoisting),如下代码:

继续阅读

Function.prototype.bind() 的妙用–修改 this 指向

除了 ES6中 的箭头函数,ES5 中如何修正 setTimeout(),$.ajax 等等中的”this”指向不正确。

假设当前页面上有一个 ID 为"btn_demo"的按钮,我想点击之后三秒改变背景色,第一直觉可能会写出以下代码:

查看全文

脚本化样式表

我们经常使用JS操作单个元素的CSS样式与类名,但用JS操作样式表也是有可能的,虽然不经常这么做,但偶尔却非常有用。

参考书籍:JavaScript: The Definitive Guide

作者 Twitter:David Flanagan,个人主页( hacked,暂时无法访问):davidflanagan.com

可以通过两种方式获取得样式表,第一种方式:向<link>或者<style>元素添加id之类的钩子( hook ),然后通过document.getElementById()等方法来选择他们;第二种方式:通过document.styleSheets属性来获取一个只读的类数组对象,他包含CSSStylesheet对象,表示与文档关联在一起的样式表。

查看全文

使用 TypeScript 重写 jQuery 插件

本文讲述使用 TypeScript 重写 jQuery 插件的历程,以及其中一些基本注意事项。

GitHub地址:codelegant/input-filter
Git@OSC地址:chuanfeng/input-filter

本文代码演示所有编辑器:Visual Studio Code(V 0.9.1)。

首先,TypeScript 比较接近强类型语言(由 C# 之父主导的项目,理所当然带有 C# 风格),在编码阶段提供 Intellisense 提示、Go Definition、Find All References、Rename… 等编译语言才有的功能,而编译时可预先抓出参数,类型,方法错误,降低执行阶段发现修复的高昂成本,首先要注意的就是 Find ALL References

查看全文

理解 JavaScript:不可变的原始值与可变的对象引用

JavaScript 中的原始值(undefained、null、布尔值、数字和字符串)与引用值(对象,数组,函数等)有着根本的区别。

存储方式
原始值
存储在stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
引用值
存储在heap)中的对象,也就是说,存储在变量处的值是一个指针point),指向存储对象的内存处。

为变量赋值时,JavaScript 的解释程序必须判断该值是原始类型,还是引用类型。要实现这一点,解析程序则需尝试判断该值是否为 JavaScript 的原始类型之一,即 Undefined、Null、Boolean、Number 和 String 型。由于这些原始类型占据的空间是固定的,所以可将他们存储在较小的内存区域——栈中。这样存储便于迅速查寻变量的值。

查看全文

学习 TypeScript:Classes

TypeScript 提前实现了 ES6 中经典的面向对象的类,官网教程:Classes

简单的例子

查看全文