用Object.create扩展本地JavaScript对象
我一直在阅读Mozilla开发者网络上的继承和原型链,并一直在想它所说的东西。
常常使用的一个错误特性是扩展Object.prototype或其他内置原型之一。
我明白为什么将一个新的函数添加到本地对象的原型会导致问题。
Array.prototype.first = function() { return this[0]; };
但是假设有人创建了一个新的数组,并希望它通过其原型链拥有Array
所有功能,并且他们做了这样的事情:
function MyArray() { Array.apply(this, arguments); }
MyArray.prototype = Object.create(Array.prototype);
MyArray.prototype.first = function() { return this[0]; };
这种扩展(继承自本地对象)的方法也被认为是不好的做法吗? 如果是这样,它会造成什么问题?
这是一个通用的软件体系结构问题,所以对于什么是对或对错有很多不同的观点。
我的意见是,本地对象应该保持原生对象。 如果我是一个局外人正在修改一个本地对象的代码库,我会很困惑。 我可以成为一名JavaScript大师,但我一开始会迷迷糊糊。
做完全相同的事情的一种更好的方式,不是通过继承延伸,而是通过组合来延伸。
function ListClass() {
var arr = [];
return {
first: function() { return arr[0]; },
get: function(i) { return arr[i]; },
push: arr.push
};
}
你的想法是完全有效的JavaScript。 唯一的反对意见是代码清晰。
链接地址: http://www.djcxy.com/p/27241.html