Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是什么意思?_Javascript_Prototype_This - Fatal编程技术网

Javascript 这是什么意思?

Javascript 这是什么意思?,javascript,prototype,this,Javascript,Prototype,This,以下是JavaScript中常见的两个代码片段: Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; Number.method('integer', function () { return Math[this < 0 ? 'ceil' : 'floor'](this); }); Function.pro

以下是JavaScript中常见的两个代码片段:

Function.prototype.method = function (name, func) {
        this.prototype[name] = func;
        return this;
};

Number.method('integer', function () {
    return Math[this < 0 ? 'ceil' : 'floor'](this);
});
Function.prototype.method=函数(名称,func){
this.prototype[name]=func;
归还这个;
};
Number.method('integer',function(){
返回数学[this<0?'ceil':'floor'](this);
});

显然,第二个代码段中的
this
代表调用增强
integer
方法的Number对象。第一段中的
这个
怎么样?从
prototype
属性中,我们可以猜到它代表被扩充的构造函数,但是代码片段背后的逻辑对我来说是难以捉摸的。有人能详细解释一下吗?谢谢

方法
方法中,
将是对调用该方法的
函数
对象的引用。在本例中,它将是对
Number
函数的引用


由于
Number
是一个内置类,可以使用
new
关键字创建,因此它实际上是一个函数,这就是
函数
原型应用于它的原因。

作为方法调用的任何函数中的
值始终是调用该方法的对象。因此在
Number.method()
中,它将是
Number
构造函数

当您在任何其他对象上调用方法时,它的行为方式与此完全相同,例如:

var obj = {
    someMethod : function() { 
        console.log(this);
    }
}
obj.someMethod(); // logs obj
上述示例与您的示例之间的唯一区别在于,这里的方法是在对象本身上找到的,而在您的示例中,它是通过查找原型链找到的。

是所有函数都使用的全局对象,就像数字的全局对象一样。它们可以用作构造函数,但也可以应用于文本,即
newfunction()
函数(){}
都与
函数相关

构造函数的
prototype
对象是为该构造函数生成的所有实例定义属性和方法的地方。构造函数是函数,在JavaScript中,函数是对象

方法只是函数的另一个名称,通常描述对象的属性

因此,在
Function.prototype
上设置方法意味着每个函数都继承了该方法

因此,构造函数
Foo
Foo.prototype.bar
)的
prototype
上的
bar
方法中的

  • Foo.prototype
    如果作为
    Foo.prototype.bar()调用
  • 如果从该实例调用,则为
    Foo
    ,例如
    var z=new Foo()中的
    z
    ;z、 bar()
  • 无论您定义此
要使用的是什么,或
  • 如果在没有上下文的情况下调用全局对象,即
    var b=Foo.prototype.bar;b()

  • 在您的代码中,
    这个
    应该是上面的第二个,因为
    数字
    是一个函数,因为它是一个构造函数,因此它是
    函数
    的一个实例

    这个
    可能意味着什么,特别是当函数被秘密地用下划线绑定时,所以答案永远不是表面上看起来的那样。不过,这是一个高级参考。有关“this”在javascript中的行为,请参阅我对另一个问题的回答。它与大多数其他语言不同:感谢您指出
    Number.method()
    只是一个方法调用,因此
    这个
    引用的最简单规则适用。