用javascript为预定义对象设置原型
Set a prototype for a predefined object in javascript
如何操作预定义对象(例如Array
)的prototype
,以便它在创建该对象的实例时执行某些操作?
简单地说,每当数组被实例化时,我都想alert('an array was created!')
。
您可以通过将数组添加到Array.prototype
对象来在数组上设置一个新方法:
Array.prototype.fizz = function () {
alert('works');
};
var arr = [];
arr.fizz();
但是,这只允许您创建新方法,不允许您扩展现有方法*,也不允许您重写Array
构造函数。
小心将新方法添加到现有类型中这可能会对整个脚本环境产生不利影响,并在某些库中导致意外行为。尽管有些人可能会称之为"糟糕的做法",但使用polyfill来实现跨浏览器兼容性是很常见的,例如通过创建Array.prototype.indexOf
。
没有"newed"数组这样的东西,这个词是"实例化的":
var a1, a2;
a1 = []; //a1 was instantiated with a new Array
a2 = new Array(); //a2 was also instantiated with a new Array
没有跨浏览器的方法来覆盖Array
构造函数。
*可以将现有方法包装在函数中,以便在调用时,现有方法除了执行新功能外,还执行其原始功能。尽管这可能被称为扩展现有方法,但它实际上是在创建一个新方法
您可以尝试用自己的函数覆盖Array
。做new Array
时似乎有效,但做[]
时无效。
(function() {
var _ac = Array;
Array = function() {
alert('an array was newed!');
return _ac.apply(this, arguments);
};
}());
演示:http://jsfiddle.net/DAg9A/
我建议您只为它创建一个数组名称空间:
array = {};
array.create = function() {
alert("Created an array");
return [];
}
因此,无论何时创建数组,都可以使用:array.create()。
您不应该,在这种情况下也不能更改本机功能。你必须负责每一个数组的创建。
相关文章:
- 用javascript为预定义对象设置原型
- 在Javascript中设置没有__proto__的函数的原型
- 从设置为原型的对象调用属性
- Javascript-从函数内部设置原型
- JS原型无法设置属性'moveRight'的未定义
- Javascript设置&阴影属性(原型链)
- 正在对通过object.create创建的对象设置原型
- JavaScript在一行中设置了命名函数的原型
- 在for循环中设置断点会导致在数组上使用原型时出错
- 在原型.js中设置原型值失败
- 业务催化剂原型核心.ashx 拒绝设置不安全的标头“连接”冲突
- 如何正确设置原型
- JavaScript - 为什么设置原型原型不起作用
- 在对象上正确设置原型构造函数
- 为什么要设置原型's构造函数转换为其构造函数函数
- 在函数构造函数中设置原型
- 当我不知道构造函数的名字时,如何设置原型呢?
- 创建对象后设置原型属性的可移植方法是什么?
- 设置原型's对象's字段更改所有实例
- 在Javascript中,为什么在构造函数上设置原型函数会改变其实例上的构造函数值