xiaochao Blog

Stay Hungry. Stay Foolish.

每天一个前端知识(78):绝不要在Object.prototype中增加可枚举的属性

frontend

function C(name) { this.name = name; } // 添加枚举属性的方法 C.prototype.allKeys = function() { var result = []; for(var key in this) { result.push(key); } return result; }; cons...

每天一个前端知识(77):使用数组而不要使用字典来存储有序集合

frontend

var info = { 'name': 'dream', '1': '10', 'A': function() {} }; for(var i in info) { console.log(i + ' : ' + info[i]); } // 输出结果如下, 并不是按照顺序输出的 // 1 : 10 // name : dream // A : functi...

每天一个前端知识(76):使用hasOwnProperty方法以避免原型污染

frontend

// 一般情况下我们可以使用 hasOwnProperty 来检测一个对象自身的属性而不是它原型链上的属性 var d1 = {}; d1.key = 'value'; console.log('toString' in d1); // true // 使用 hasOwnProperty 方法 console.log(d1.hasOwnProperty('toString')); // fa...

每天一个前端知识(75):使用null原型以方式原型污染

frontend

function C() {} C.prototype = null; var o = new C(); // 我们得到的依然是一个对象 console.log(Object.getPrototypeOf(o) === null); // false console.log(Object.getPrototypeOf(o)); // Object {} // 使用Object.create(...

每天一个前端知识(74):使用Object的直接实例构造轻量级的字典

frontend

// 使用一个对象作为字典来使用 var dict1 = { key1: 'value1', key2: 'value2', key3: 'value3' }; var props1 = []; for(var p in dict1) { props1.push(p); } console.log(props1); // [ 'key1', 'key2', '...

每天一个前端知识(73):避免使用轻率的猴子补丁

frontend

// 为数组添加一个split方法 // @1直接修改原型 Array.prototype.split = function(i) { return [this.slice(0, i), this.slice(i)] }; var a = [1, 2, 3, 4]; console.log(a.split(2)); // [ [ 1, 2 ], [ 3, 4 ] ] // @2可以通...

每天一个前端知识(72):将原形视为实现的细节

frontend

function A(attr1) { this.attr1 = attr1; } A.prototype.method1 = function(){}; function B(attr1, attr2) { A.call(this, attr1); this.attr2 = attr2; } B.prototype = Object.create(A.prototy...

每天一个前端知识(71):避免继承标准类

frontend

// 尝试继承标准类 function Dir(path, entries) { this.path = path; for(var i = 0; i < entries.length; i++) { this[i] = entries[i]; } } Dir.prototype = Object.create(Array.prototype);...

每天一个前端知识(70):不要重用父类的属性名

frontend

// 定义一个父类 function Person(name, age) { this.name = name; this.age = age; this.id = 0; } Person.prototype.sayHello = function() { console.log('My name is ' + this.name + ' and my age...

每天一个前端知识(69):在子类的构造函数中调用父类的构造函数

frontend

// 定义一个父类 function Person(name, age) { this.name = name; this.age = age; } Person.prototype.sayHello = function() { console.log('My name is ' + this.name + ' and my age is ' + this.age)...