sách gpt4 ăn đã đi

javascript - new 运算符在 JavaScript 中是如何工作的?

In lại 作者:IT王子 更新时间:2023-10-29 03:09:28 27 4
mua khóa gpt4 giày nike

可能是 JavaScript 中理解最少的部分,位于原型(prototype)链旁边。

所以问题是:如何...

new dataObj(args); 

...实际创建一个对象,并定义其原型(prototype)链/构造函数/等?

最好是展示一个替代方案,以充分理解这个关键字。

câu trả lời hay nhất

mới 运算符使用内部 [[Construct]]方法,它基本上执行以下操作:

  • 初始化一个新的本地对象
  • 设置此对象的内部[[Prototype]],指向Function prototype 属性。
    • 如果函数的 prototype 属性不是对象(原始值,例如 Number、String、Boolean、Undefined 或 Null),则使用 Object.prototype相反。
  • 创建对象后,它调用函数,提供对象作为其 cái này giá trị.
  • 如果被调用函数的返回值是原语,则返回内部创建的对象。
  • 否则,如果返回一个对象,则内部创建的对象将丢失。

mới 运算符的等效实现可以这样表示(假设 ECMAScript 5 Object.create 方法可用):

function NEW(f) {
var obj, ret, proto;

// Check if `f.prototype` is an object, not a primitive
proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

// Create an object that inherits from `proto`
obj = Object.create(proto);

// Apply the function setting `obj` as the `this` value
ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

if (Object(ret) === ret) { // the result is an object?
return ret;
}
trả về đối tượng;
}

// Example usage:
function Foo (arg) {
this.prop = arg;
}
Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');
obj.prop; // 'bar'
obj.inherited; // 'baz'
obj instanceof Foo // true

关于javascript - new 运算符在 JavaScript 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6750880/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress