ECMAscript 是否提供任何构造函数的方法?
Does ECMAscript offer any ways of constructing functions?
据
我所知,构造函数无法生成函数:它们可以将属性分配给this
,并为其他泛型属性提供即时prototype
参考,因此不是特定于实例的属性。但是不可能直接将任何东西分配给this
。即使是这样,合乎逻辑的结果也是用赋值替换实例及其原型链。
从我读到的 ES6 类来看,它们相当于在单个语句中对构造函数声明和原型实例化进行分组的语法糖。
我的实际兴趣在于instanceof
运算符的值,即断言 X 符合 Y 的高阶描述,而无需任何鸭子类型。特别是,鸭子打字是不可取的,因为它依赖于Y本身外部的Y的某种定义。
Edit
我对作为其他函数实例的函数感兴趣
在 ECMAScript 6 中,你应该能够在函数上调用Object.setPrototypeOf
,但不建议这样做,尽管在 JavaScript 中函数也是一个对象,但最终可能会遇到意外的行为
function foo() {}
function bar() {}
Object.setPrototypeOf(bar, foo.prototype);
bar instanceof foo; // true
bar.constructor === foo; // true
我不完全确定你在问什么,但希望这些代码示例能帮助你
从使用 new
调用的函数返回对象
function Foo() {
// a constructor
}
function Bar() {
// another constructor
return new Foo();
}
var b = new Bar();
b instanceof Bar; // false
b instanceof Foo; // true
使用new Function
function Fizz() {
return new Function('return "Buzz";');
}
var b = Fizz();
b(); // "Buzz"
使用 call
、 apply
或 bind
调用具有不同this
的函数
function hello() {
return this;
}
hello(); // window, null or error depending on environment
hello.call({'foo': 'bar'}); // {'foo': 'bar'}
hello.apply({'foo': 'bar'}); // {'foo': 'bar'}
var b = hello.bind({'fizz': 'buzz'});
b(); // {'fizz': 'buzz'}
扩展构造函数
function Foo() {
this.foo = 'foo';
}
Foo.prototype = {'fizz': 'buzz'};
function Bar() {
Foo.call(this);
this.bar = 'bar';
}
// and link in inheritance
Bar.prototype = Object.create(Foo.prototype);
var b = new Bar();
b.bar; // "bar"
b.foo; // "foo"
b.fizz; // "buzz"
b instanceof Bar; // true
b instanceof Foo; // true
// but
Bar instanceof Foo; // false
构造函数可以构造函数。如果构造函数返回一个对象,则构造函数返回的对象将成为整个new
表达式的结果。
请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new
由于函数是对象,因此您也可以从构造函数返回它们,如下所示:
function Shout(text) {
return function () {
alert(text);
};
}
shout1 = new Shout('hola');
shout2 = new Shout('eeee');
shout1(); // hola
shout2(); // eeee
相关文章:
- 使构造函数参数具有ES6类方法的特权
- 如何从构造函数中调用js原型方法
- 未能运行构造函数:TypeError:对象#<对象>没有方法'addPlugin'
- 从构造函数es6调用静态方法
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 使用sinon.js创建一个“;“间谍对象”;使用基于真实构造函数/原型的间谍方法
- 为什么用构造函数创建对象会执行对象's方法
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- Typescript从类的构造函数调用方法
- JavaScript构造函数、原型附加方法和'这'
- 为什么React在类构造函数中使用setState方法时抛出错误
- 在OPP JS中,您可以从构造函数访问原型函数内部声明的方法
- Javascript:类构造函数基础 - 在单独的方法中定义属性
- 为什么这个私有方法在构造函数中
- 在 JavaScript 中隐式地将方法添加到构造函数的原型中
- 构造函数中的方法和创建构造函数后函数上的方法有什么区别
- 在ES2015中定义一个类,构造函数方法是什么以及为什么它是必不可少的
- 何时有时将对象类型定义为将实例绑定方法镜像为构造函数上的静态实用程序函数很有用
- 带有构造函数和方法的 NodeJS 模块