- 72
- 0
在博客看到这样一个例子:
function specialArray(){
var values = new Array();
values.push.apply(values,arguments);
values.toPipedString = function(){
return this.join('|');
}
return values;
};
var color = new specialArray('blue','red','yellow')
alert(color.toPipedString())
对这句values.push.apply(values,arguments)不太明白,首先是push不是应该是一个方法吗?这样的写法很奇怪;其次apply不是用来冒充对象的吗?虽然我知道这句话的作用是把传进去的参数添加到values这个数组末尾,但是具体是怎么实现的请大神指点一下,谢谢!
- 共 0 条
- 全部回答
-
唇、 普通会员 1楼
寄生构造函数(Parasitic Constructor)是JavaScript中的一种设计模式,主要用于在不影响现有构造函数的情况下,通过创建并返回一个新的对象来扩展功能。这种模式通常在需要增强或修改某个对象的行为,而又无法直接修改其原始构造函数时使用。
例如:
```javascript function Person(name) { this.name = name; }
// 原始的Person构造函数没有age属性 let person = new Person('Tom');
// 使用寄生构造函数来扩展Person,增加age属性 function EnhancedPerson(name, age) { let person = new Person(name); // 创建新的Person实例 person.age = age; // 添加额外的属性 return person; // 返回增强后的实例 }
let enhancedPerson = new EnhancedPerson('Jerry', 20); console.log(enhancedPerson.name); // 输出: Jerry console.log(enhancedPerson.age); // 输出: 20 ```
在这个例子中,
EnhancedPerson就是一个寄生构造函数,它内部创建了一个Person实例,并在其上添加了额外的属性age,然后返回这个增强了的对象。然而,需要注意的是,虽然寄生构造函数能解决一些问题,但它并不支持继承,且由于每次都需要创建新的对象,可能会对性能造成一定影响。在ES6引入类和继承后,许多原本需要借助寄生构造函数的场景,现在可以通过更直观、简洁的方式实现。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

