gpt4 book ai didi

javascript - new 关键字在幕后做了什么?

转载 作者:可可西里 更新时间:2023-11-01 01:30:38 24 4
gpt4 key购买 nike

我很好奇 new 关键字除了更改 this 范围所指的内容外,在后台还能做什么。

例如,如果我们将使用 new 关键字使函数在对象上设置属性和方法与仅使函数返回新对象进行比较,那么新对象还有什么额外的作用吗?

如果我不想从函数构造函数创建多个对象,这是首选

var foo2 = function () {
var temp = "test";

return {
getLol: function () {
return temp;
},

setLol: function(value) {
temp = value;
}
};

}();

var foo = new function () {
var temp = "test";

this.getLol = function () {
return temp;
}

this.setLol = function(value) {
temp = value;
}
}();

firebug 分析器告诉我使用 new 关键字稍微快一些(2 毫秒而不是 3 毫秒),在大对象上 new 仍然快得多吗?

[编辑]

另一个问题是真正大的对象构造函数是在函数的底部有一个返回(它将有大量的本地函数)或者在函数的顶部有一些 this.bar = ... 更多可读?什么是好的约定?

var MAIN = newfunction() {
this.bar = ...

// Lots of code
}();

var MAIN2 = function() {
// Lots of code

return {
bar: ...
}
}();

最佳答案

引用 Douglas Crockford来自 the Good Parts book (第 47 页),回答这个问题的标题:

If the new operator were a method instead of an operator, it could be implemented like this:

Function.method('new', function () {

// Create a new object that inherits from the
// constructor's prototype.

var that = Object.create(this.prototype);

// Invoke the constructor, binding -this- to
// the new object.

var other = this.apply(that, arguments);

// If its return value isn't an object,
// substitute the new object.

return (typeof other === 'object' && other) || that;
});

Function.method 方法实现如下。这将实例方法添加到类 ( Source ):

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

进一步阅读:

关于javascript - new 关键字在幕后做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3650892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com