摘要:jq1.4中新增了个静态方法$.isPlainObject,见http://api.jquery.com/jquery.isPlainObject/ 。对于通过字面量定义的对象和new Object的对象返回true,new Object时传参数的返回false,如var p1 = new Object;p1.name = 'tom';var o1 = new Object('aa');console.log($.isPlainObject({name:'Jack'})); //-> trueconsole.log($.isPlainObj
阅读全文
摘要:这里讨论给Object传参时,其内部的处理。参考:ECMA262 V5 15.2.2.11, 参数是一个对象,核心js对象(native ECMAScript object)或宿主对象(host object),那么将直接返回该对象。 其生成的对象构造器仍然是所传参数对象的构造器。这样造成的后果是虽然该对象是new Object,但其constructor不一定是Object。function Person(){this.name='jack';}var w = new Object(window), d = new Object(document), p = new Obje
阅读全文
摘要:采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON )。ECMA-262(E3) 中没有将JSON概念写到标准中,但在 ECMA-262(E5) 中JSON的概念被正式引入了,包括全局的JSON对象和Date的toJSON方法。1,eval方式解析,恐怕这是最早的解析方式了。function strToJson(str){ var json = eval('(' + str + ')'); return json;}记得str两旁的小括号哦。2,new Function形式,比较怪异哦。function strT
阅读全文
摘要:如下typeof Number('44.5');typeof parseInt('44.5');typeof parseFloat('44.5');typeof ('44.5'-0);typeof +'44.5';typeof ('44.5'*1);typeof ~~'44.5';//http://james.padolsey.com/javascript/double-bitwise-not/typeof '44.5'|0还有其它的吗?
阅读全文
摘要:这里把符合以下条件的对象称为伪数组(ArrayLike)1,具有length属性2,按索引方式存储数据3,不具有数组的push,pop等方法如1,function内的arguments 。2,通过document.forms,Form.elements,document.styleSheets, S...
阅读全文
摘要:我们经常使用nodeType==1判断元素是否是一个HMTLElement元素。页面上的元素都是节点(Node),有元素节点(Element Node)、属性节点(Attribute Node)、文本节点(Text Node)等。w3c nodeType 的定义如下const unsigned short ELEMENT_NODE = 1; const unsigned short ATTRIBUTE_NODE = 2; const unsigned short TEXT_NODE = 3; const unsigned short CDATA_SECTION_NODE = 4; const
阅读全文
摘要:一,局部变量先使用后声明,不影响外部同名变量var x = 1; // --> 外部变量xfunction fn(){ alert(x); // --> undefined 局部变量x先使用 var x = 2; // 后声明且赋值}fn();alert(x); // --> 1第一点,函数fn内第一句输出x,x是在第二句才定义的。这在JS中是允许的,这里的允许是指不会出现语法错误程序可以运行。但在其它语言如C,Java中却是不允许的。变量必须先声明后使用,如public class Test { public static void main(String[] args)
阅读全文
摘要:4,继承工具函数四/** * @param {String} className * @param {String/Function} superClass * @param {Function} classImp */function $class(className, superClass, classImp){ if (superClass === '') superClass = Object; function clazz() { if (typeof this.init == "function") { this.init.apply(th...
阅读全文
摘要:3,继承工具函数三/** * @param {Function} subCls * @param {Function} superCls */function extend(subCls,superCls) { subCls.prototype = new superCls(); }父类,按原型方式写,即属性和方法都挂在原型上。/** * 父类Person */function Person(){}Person.prototype.nationality = 'China';Person.prototype.getNationality = function() {return
阅读全文
摘要:这篇开始写几个工具函数实现类的扩展。每个工具函数都是针对特定的写类方式(习惯)。这篇按照构造函数方式写类:属性(字段)和方法都挂在this上。以下分别提供了个类,分别作为父类和子类。// 父类Personfunction Person(nationality) { this.nationality = nationality; this.setNationality = function(n) {this.nationality=n;}; this.getNationality = function() {return this.nationality;};}// 类Manfunction .
阅读全文
摘要:前段时间温故了下JS OO之写类方式,从这篇开始我们看看JS OO之继承方式。 面向对象的语言多数都支持继承,继承最重要的优点就是代码复用,从而构建大型软件系统。如果一个类能够重用另一个类的属性和或方法,就称之为继承。从这个角度来看看JS的继承方式。JS中继承方式与写类方式息息相关。不同的写类方式造
阅读全文
摘要:Javascript中小括号有五种语义语义1,函数声明时参数表function func(arg1,arg2){ // ...}语义2,和一些语句联合使用以达到某些限定作用// 和for in一起使用for(var a in obj){ // ...}// 和if一起使用if(boo){ //...}// 和while一起使用while(boo){ // ...}// 和do while一起使用do{ // ...}while(boo)注意:在与if、while及do while一起使用时小括号会将其中的表达式结果隐式的转换成布尔值。见 JavaScript中的隐式类型转换 。语义3...
阅读全文
摘要:Javascript中括号有四种语义语义1,声明数组var ary = []; // 声明一个空数组var ary = [1,3]; // 声明一个数组,同时赋初值语义2,取数组成员var ary = [1,2,3];var item = ary[0];语义3,定义对象成员 (可以不遵循标识符规则 )var obj = {};// 为obj添加一个属性name,name是合法的标识符,即也可以通过obj.name方式来定义obj['name'] = 'jack'; // 为obj添加一个属性2a,2a不是合法的标识符(不能以数字开头),不能通过obj.2a来定义
阅读全文
摘要:这篇我们看看各个JS库的写类方式,这也是写类系列的最后一篇。 1,Prototype的写类方式 Prototype中使用Class.create方法,如下 initialize完成对象的初始化(相当于构造函数,必不可少),方法依次往下写即可。有个问题,但是p.constructor == Perso
阅读全文
摘要:工具函数如下 定义一个Person类 创建对象看看 使用该工具函数写类需注意,this.init方法必不可少。使用过Prototype库的同学会知道Class.create后的initialize方法也是必不可少的。 因为没考虑继承,第二个参数superClass使用空字符串,即默认继承于Objec
阅读全文
摘要:续上篇, 构造函数+原型 组装一个类;同一构造函数可以定义出多个类型 与上一篇方式类似,仍然用构造函数,原型对象,定义两个类。 与上一篇不同的是,虽然Man和Woman都是用Person,proto组装的。但Man却不等于Woman。即同一个构造函数(Person)可以定义出不同的类。 相关: Ja
阅读全文
摘要:这篇开始会记录一些写类的工具函数,通过上篇我们知道本质上都是 构造函数+原型。理解了它碰到各式各样的写类方式就不惧怕了。 构造函数 + 原型 直接组装一个类;同一构造函数将组装出同一类型 用构造函数来生成类实例的属性(字段),原型对象用来生成类实例的方法。 这时候已经得到了两个类Man,Woman。
阅读全文
摘要:从这篇起,会由浅到深的分析JS OO之写类方式,大概会有5-8篇。后面陆续会分析流行库(框架)的写类方式。 一些写类工具函数或框架的写类方式本质上都是 构造函数+原型。只有理解这一点才能真正明白如何用JavaScript写出面向对象的代码,或者说组织代码的方式使用面向对象方式。当然用JS也可写出函数
阅读全文
摘要:以函数中有无this来讨论。没有this时返回一个空的对象{},有this时返回一个非空对象。下面是一个没有this的函数// 返回值是基本类型function fun() { return "jack";}var c = new fun();for (var atr in c) { alert(atr);} alert(c); //[object Object]返回值c不是"jack", 从for in执行后没有输出任何属性可以看出 c 是一个空的对象{}。再看看有this的函数,函数中有this实际上是在写一个类。但由于js的灵活性,造成了许多诡异的
阅读全文
摘要:前面有一篇提到了 匿名函数的多种调用方式。这篇看看具名函数的多种调用方式。1、() 平时最常用的就是()运算符来调用/执行一个函数// 无参函数fun1function fun1() { alert('我被调用了');}fun1();// 有参函数fun2function fun2(param) { alert(param);}fun2('我被调用了');ECMAScript3后加入给Function加入了call和apply后,就有了下面两种2、call// 无参函数fun1function fun1() { alert('我被调用了');}f
阅读全文