编辑:我意识到我将MyConstructorFunc.prototype
传递给了`_.extend()。
当我想用Underscore扩展一个函数时,我遇到了一个有趣的实现细节。
我构建了一个函数构造函数,
var MyConstructorFunc = function() {
...
}
然后我返回了
的结果return _.extend(MyConstructorFunc.prototype, {
\\ ...some properties...
}
我得到的是typeof MyConstructorFunc == "object"
!如果_.extend
将属性合并为function
,为什么会返回object
?
查看_.extend
函数,我看不到发生的地方......
_.extend = function(obj) {
if (!_.isObject(obj)) return obj;
var source, prop;
for (var i = 1, length = arguments.length; i < length; i++) {
source = arguments[i];
for (prop in source) {
if (hasOwnProperty.call(source, prop)) {
obj[prop] = source[prop];
}
}
}
return obj;
};
如果我MyConstructorFunc["someProp"] = someObject["someProp"]
和return MyConstructorFunc
,我又返回了一个JavaScript object
?
我错过了什么......
答案 0 :(得分:2)
您可能正在将Function对象传递给_.extend。您的示例代码没有显示它,但是如果您使用&#34; new&#34;来创建MyConstructorFunc的新实例。关键字,然后结果将是一个对象。
var MyConstructorFunc = function() {
}
var foo = _.extend(MyConstructorFunc, {a:1});
console.log(typeof foo); // function
var funcObj = new MyConstructorFunc();
console.log(typeof funcObj); //object
扩展MyConstructorFunc本身将返回一个函数类型。一旦你使用构造函数创建一个给你一个对象的新函数。