Object-Oriented JavaScript笔记(四)
Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) Object-Oriented JavaScript笔记(二) Object-Oriented JavaScript笔记(三) 第五章 原型 原型链继承:new 出来的对象仍能继承到给原型prototype添加的方法 给实例添加与原型属性同名的属性,会隐藏原型链属性。 >>> var Class = function(){}; >>> Class.prototype.name = ‘John’; >>> var toy = new Class() >>> toy.name = ‘Tom’; >>> toy.name “Tom” >>> delete toy.name >>> toy.name “John” 并不是所有的属性都会在for in中被枚举出来。 判断属性是自身属性还是原型链上的属性使用hasOwnProperty() propertyIsEnumerable()对于prototype上的属性都会返回false,虽然他们都能在for in中被枚举出来。 isPrototypeOf()判断一个对象是否是另一个对象的原型。 Prototype陷阱 prototype对象被替换后,实例的原型链仍然是存在的 prototype.constructor并不可靠 介于此,重写prototype后,最好重置constructor (这里的确很让人迷惑) -EOF-
新项目: Story Board
大约在前年,我就开始使用Python写Blog程序并将其Hosted在GAE上,并一度有将其开源的打算,后由于GAE数据库读取价格策略改变,代价太高而放弃;期间还写了一个简单的图片存储程序承诺将其开源,由于代码过于草稿没时间整理也一拖再拖。两者,代码至今都没有释放出来。 而在今年年初,GAE完美支持Django+MySQL,给原本失去的希望又重新点燃,用其托管一个小访问量的站点又有了规避方案,另一方面Cloud SQL可以方便的导出数据,数据备份不需要再经过复杂的操作。在二月结束的时候,我写了一个小的网站原型,后经过改进,并将其命名为Story Board托管在GitHub上开源出来。 同时用它替换原来的Oh Bug!。希望Oh Bug!不再单单只是一个Blog,也是一个小众技术讨论区,欢迎任何人参与进来讨论~ Project Story Board https://github.com/darcyliu/storyboard Oh Bug!
实现JavaScript类继承(inherits)
简单实现了个JavaScript类继承(比下午在公司实现的要简单得多),继承prototype方法和静态方法,实际使用过程中mix函数还需要丰满一下。这东西水很深,自己也一知半解的,不多说直接放代码。 Function.prototype.method = function(name,fn){ this.prototype[name] = fn; return this; } Function.method(’inherits’,(function(){ function mix(a,b){ for(var i in b){ //replace if(typeof a[i] == ‘undefined’){ a[i] = b[i]; } } } return function(Parent){ var fn = function(){}; mix(this.prototype,Parent.prototype); mix(this,Parent); this.__super__ = Parent; //static method //object.__super__.demo //prototype method //object.__super__.prototype.hidden return this; }; })()); var a = [...]
Object-Oriented JavaScript笔记(三)
Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) Object-Oriented JavaScript笔记(二) 第四章 对象 对象 对象属性名需要引号括起来的情况有: 1.保留字2.包含空格或特殊字符3.以数字开头 Best Practice Tip: No quotes 1.使用点访问符访问方法和属性 2.在对象字面量中不要使用引号将属性括起来 构造函数 按照约定,构造函数首字母大写 不使用new操作符调用构造函数跟调用普通函数无异,此时this指针指向全局对象global object JavaScript 是运行在宿主环境中的,其提供一个全局对象,所有的全局变量都是全局对象的属性。 在浏览器中,该全局对象是window,如 >>> var a = 1; >>> window.a 1 instanceof操作符用于测试对象的构造函数 注:原书103页的h instanceof Object;得到false实际上是印刷错误, Object是基类 特例: >>> Object.prototype instanceof Object; false >>> Object instanceof Object; true 说明Object.prototype可能是内置类型 函数返回对象,可以用该特性来改变this指针 function Test = [...]
Object-Oriented JavaScript笔记(二)
Object-Oriented JavaScript 笔记 Object-Oriented JavaScript笔记(一) 第三章 函数 JavaScript会给定义了但是没有传值的参数赋值为undefined,若是参数多于定义的,会被忽略。 没有函数都会带有一个名为arguments的类数组变量,包含所有传入的参数信息。 JavaScript内置函数(Pre-defined Functions): parseInt() parseFloat() isNaN() isFinite() encodeURI() decodeURI() encodeURIComponent() decodeURIComponent() eval() 使用parseInt时最好每次都明确指定第二个(基数)参数,如 parseInt(‘FF’, 16) parseFloat只接受一个参数,并能够识别指数表示法,如 parseFloat(’123e2′) escape() 与 unescape() 已经被弃用,不应该再被使用。 alert并不是JavaScript的一部分,并且它会阻塞浏览器线程,在富ajax应用中不应该使用它。 未使用var 声明的变量会被分配到全局作用域 >>> var f = function(){test = 2;}; >>> test ReferenceError: test is not defined >>> f(); >>> test 2 函数中声明的局部变量与全局变量同名会覆盖同名全局变量,即使是先使用后声明。 var a = [...]

