让我们看两个示例,我将在其中尝试解释我想要理解的内容。
var Car = function(){
// Init class
function Car() { };
// Private func/vars
var private = { color:'red' };
// Public func/vars
Car.prototype = {
newColor: function(color) { private.color = color },
getColor: function() { return private.color }
};
return Car.prototype; // return with prototype
};
var myCar = new Car();
和:
var Car = (function(){
// Init class
function Car() { };
// Private func/vars
var private = { color:'red' };
// Public func/vars
Car.prototype = {
newColor: function(color) { private.color = color },
getColor: function() { return private.color }
};
return Car; // avoid prototype adding parentheses on next line;
})();
var myCar = new Car();
让我们看看!,这两个类都是作为函数表达式创建的,并且都同样工作。它们之间的唯一区别是: 第一个返回 Car 函数及其原型属性。第二个工作返回 Car 函数,避免原型属性,而是使用 IIFE。
return Car.prototype;
使用和避免 IIFE 和使用return Car;
使用 IIFE (类声明末尾的括号)有什么区别。