相关疑难解决方法(0)

为什么扩展本机对象是一种不好的做法?

每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object,几乎破坏了任何对象上的所有循环?

TJ Holowaychukshould.js为例.他增加了一个简单的getterObject,一切工作正常(来源).

Object.defineProperty(Object.prototype, 'should', {
  set: function(){},
  get: function(){
    return new Assertion(Object(this).valueOf());
  },
  configurable: true
});
Run Code Online (Sandbox Code Playgroud)

这真的很有道理.例如,可以扩展Array.

Array.defineProperty(Array.prototype, "remove", {
  set: function(){},
  get: function(){
    return removeArrayElement.bind(this);
  }
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)

是否有任何反对扩展本机类型的论据?

javascript prototype prototypal-inheritance

121
推荐指数
7
解决办法
3万
查看次数

原型如何在打字稿上扩展?

我扩展了函数原型但是typescript无法识别它.

Function.prototype.proc = function() {
  var args, target, v;
  var __slice = [].slice;
  args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
  target = this;
  while (v = args.shift()) {
    target = target(v);
  }
  return target;
};
// generated by coffee-script

var foo: (number) => (string) => number
  = (a) => (b) => a * b.length;
console.log(foo.proc("first", "second"))
Run Code Online (Sandbox Code Playgroud)

结果:tsc -e

The property 'proc' does not exist on value of type 'Function'
Run Code Online (Sandbox Code Playgroud)

我该如何扩展这个对象?

javascript typescript

18
推荐指数
2
解决办法
8409
查看次数

Angular2和Typescript:如何添加字符串扩展方法/原型

我想扩展方法添加format()String.所以我的期望是我可以String.format在我的项目中的任何地方使用.我遵循了这个主题的指导方针,但这没有用.我收到了这个错误: 在此输入图像描述

谁能帮我?

提前致谢.

ps:我想像在角度1.xx中那样添加扩展方法

在此输入图像描述


编辑

使用declare global不会得到错误.

declare global {
interface String {
    format(): string;
}}

String.prototype.format = function () :string {
var result = arguments[0];
for (var i = 0; i < arguments.length - 1; i++) {
    var reg = new RegExp("\\{" + i + "\\}", "gm");
    result = result.replace(reg, arguments[i + 1]);
}
return result;}
Run Code Online (Sandbox Code Playgroud)

我们如何使用String.format('<img alt="{0}" title="{0}" src="{1}" />', name, id); 既然format不需要参数

extension-methods typescript angular

15
推荐指数
2
解决办法
7492
查看次数

Typescript,是否可以将方法添加到外部类原型?

可以说,我想为NgForm添加方法(类)

NgForm.prototype.markAsDirty = function (): void {
    let f: NgForm = this;
    Util.forEach(f.form.controls, (k, v: AbstractControl) => {
        v.markAsDirty(false);
    });
};
Run Code Online (Sandbox Code Playgroud)

这在打字稿中是否有可能?

我知道:

但它只适用于接口,而不适用于类.

prototype typescript angular

4
推荐指数
1
解决办法
907
查看次数