相关疑难解决方法(0)

什么是"new.target"?

ECMAScript 2015规范提到关键字(或单词?)new.target正好3次 - 在14.2.3中 1次:

通常,Contains不会查看大多数函数表单但是,Contains用于检测ArrowFunction中的new.target,this和super用法.

14.2.16中两次:

ArrowFunction不为arguments,super,this或new.target定义本地绑定.对ArrowFunction中的参数,super,this或new.target的任何引用 都必须解析为词汇封闭环境中的绑定

MDN提到它,但非常模糊,页面不完整.

巴别塔似乎不支持它.尝试在函数(箭头或其他)中使用new.target时出现语法错误.

它是什么,它应该如何使用?

javascript ecmascript-6

25
推荐指数
2
解决办法
6139
查看次数

如何`new`操作符能够在Function.prototype.bind(..)中覆盖硬绑定

这是一个纯粹的理论问题.我从'你不知道js'学习javascript,我被困bind在JS 中的函数实现.考虑以下代码:

function foo(something) {
  this.a = something;
}

var obj1 = {};

var bar = foo.bind(obj1);
bar(2);
console.log(obj1.a); // 2

var baz = new bar(3);
console.log(obj1.a); // 2
console.log(baz.a); // 3
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我们绑定foo()obj1,所以thisfoo()属于obj1这就是为什么obj1.a变成2当我们调用bar(2).但是new操作员能够优先使用,obj1.a即使bar(3)被调用也不会改变new.

以下是MDN页面提供的polyfill bind(..):

if (!Function.prototype.bind) {
Function.prototype.bind = function(oThis) {
    if (typeof this !== "function") {
        // closest thing possible to …
Run Code Online (Sandbox Code Playgroud)

javascript new-operator

14
推荐指数
1
解决办法
661
查看次数

检测构造函数中是否使用了新关键字?

在JS中的构造函数对象中,如果它是在没有new关键字的情况下创建的,则"this"变量是对窗口而不是对象的引用.尝试检测这个是一个特别明智的想法吗?

function MyObject ()
{
    if (this === window) {
        alert('[ERROR] Oopsy! You seem to have forgotten to use the "new" keyword.');
        return;
    }

    // Continue with the constructor...
}

// Call the constructor without the new keyword
obj = MyObject()
Run Code Online (Sandbox Code Playgroud)

javascript object

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

JavaScript:构造函数可以创建documentElement对象吗?

我想创建一个构造函数来创建一个documentElement对象.

作为一个例子,考虑新的Audio()构造函数 - 它创建一个documentElement对象,如果你传递一些变量,它会用属性填充新的documentElement.它不会将它插入DOM,它只是创建对象.

所以,问题是 - 是什么让documentElement与一个vanilla javascript对象({property:value}类型)不同,你能为对象编写构造函数吗?

编辑:

我正在使用的是在没有它的浏览器中重新创建新的Audio()构造函数,使用quicktime或flash HTMLObjectElement代替HTMLAudioElement.

我可以认为audio.constructor将引用HTMLObjectElement,因为在支持它的浏览器中使用新的Audio(),audio.constructor引用HTMLAudioElement.

我不确定Audio.prototype.当我在具有音频支持的浏览器中查询console.log(Audio.prototype)时,它们根本不返回任何内容 - 甚至在console.log中都没有空行 - 所以这让我感到难过.但是,如果我理解正确,它不会影响我的目标.

目的是能够使用Audio构造函数进行编码,并让浏览器本地处理它,或者在需要时设置插件实例.

javascript constructor dom functional-programming

2
推荐指数
1
解决办法
4579
查看次数

有没有办法让JavaScript函数知道它是正常调用还是与"new"一起调用?

可能重复:
如何检测函数是否被调用为构造函数?

我希望在JavaScript中有一个函数,如果它被正常调用或者为了创建一个新实例而调用它,它的行为会有所不同.可能存在许多不同的用途,其中两个功能可以相关或不相关.new当函数总是用于创建新实例时,一种用途是免除编码器必须键入:

function MyClass(arg1, arg2) {
  if(/* not called with "new" */) return new MyClass(arg1, arg2);

  // instance initialization stuff here...

}
Run Code Online (Sandbox Code Playgroud)

这样我就不必输入var x = new MyClass(arg1, arg2):输入就足够了var x = MyClass(arg1, arg2)(但前者也不会错).

只是可能使用的一个例子.

可以这样做吗?如果是这样,怎么样?

javascript

2
推荐指数
1
解决办法
135
查看次数