LibJS: Throw when new is used on non-constructor methods #7057
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Non-constructor methods and plain object methods were incorrectly treated as constructors when used with "new", resulting in a new Object instance instead of throwing a TypeError. Example:
// ok: class constructor
class OK { constructor() {} }
const ok = new OK();
new ok.constructor;
// should throw: instance method
class FAIL { m() {} }
const fail = new FAIL();
new fail.m;
// should throw: method on object literal
new ({ m() {} }).m;
// should throw: function expression used as object property
new ({ b: function () { this.x = 2; } }).b();
// should throw: extracted class method used with new
const m = class { m() {} }.prototype.m;
new m;
Fixes #6926