'返回this'在增加类型时执行
What does 'return this' do when augmenting types?
Crockford的《JavaScript the Good Parts》一书谈到了一个用于扩展基本类型的函数。他的函数如下所示:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
}
我不明白这里如何/为什么使用'this'变量。当用new调用该函数时,我只使用了'this',但是这个函数是这样调用的:
Number.method('integer', function () {
return Math[this < 0 ? 'ceil' : 'floor'](this)
});
this
指向调用函数时引用的对象。
var obj = {fn: function() {return this;}};
obj.fn(); // obj
var fn = obj.fn;
fn(); // window or null or error
fn.call(obj); // obj
fn.apply(obj); // obj
方法在Function.prototype
上,这意味着所有函数实例继承方法, method
中的this
预计会引用您正在调用它的函数实例,即
Function.prototype.getThis = function () {return this;};
function hello() {}
hello.getThis(); // hello
// and consequently
hello.getThis().getThis().getThis().getThis().getThis(); // hello
构造函数也是函数。因此所有构造函数都继承方法。方法在这里的例子意味着"添加一个属性name
到由this
(构造函数)的实例继承的原型中,并将该属性的值设置为func
,然后返回构造函数,以便您可以链接它"
function Foo() {}
Foo.method('bar', 'baz').method('fizz', 'buzz'); // Foo
var foo = new Foo();
foo.bar; // "baz", inherited from Foo.prototype
foo.fizz; // "buzz", inherited from Foo.prototype
this
是指它的执行上下文。更准确地说,在函数内部使用,并指向调用它的对象。
相关文章:
- mootools类型的函数将文本作为函数执行
- JS:执行'失败;getComputedStyle'在'窗口':参数的类型不是'
- 未捕获的类型错误:无法在“CanvasRenderingContext2D”上执行“getImageData”:提供的双
- BreezeJS / ODATA:只能对实体类型执行强制转换
- 收到错误:无法在“节点”上执行“appendChild”:参数 1 的类型不是“节点”
- 1.js:23未捕获类型错误:执行'失败;appendChild'在'节点':参数1不是
- 未捕获的类型错误:无法执行'观察'在'突变观察者':参数1不是'节点'
- 未捕获的类型错误:无法读取属性,JS 在页面呈现之前执行
- 未捕获的类型错误:无法在“CSSStyleSheet”上执行“插入规则”:需要 2 个参数,但仅存在 1 个参数
- 无法在“节点”上执行“appendChild”:参数 1 的类型不是“节点”
- 执行“JSON 类型”比较
- 主干:类型错误:未执行不是一个函数
- 在特定内容类型的节点创建时执行 JavaScript
- 角度 - 如何对不同类型的错误执行动态警报
- 执行操作时 redux 中的错误:未捕获的类型错误:无法读取未定义的属性“类型”
- Javascript filter() 是否默认执行类型强制
- 如何在GWT(或Java AWT Swing)中使用相同的事件处理程序对相同类型的多个对象执行相同的功能
- 错误:无法在“节点”上执行“appendChild”:参数 1 的类型不是“节点”
- 在Razor生成的隐藏字段上强制执行类型,在没有强制转换的JavaScript中接收变量
- 获取拒绝执行'*'因为它的MIME类型('application/json')是不可执行的