Knockout.js 敲除依赖注入
我刚刚在一本优秀的KO手册中看到了一个在自调用函数中创建新类的示例,其方式不应污染全局名称空间。 我无法理解为什么他们将myApp当前名称空间发送到内部作用域,如果它存在于外部作用域中的话。据我所知,如果您向js函数发送一个对象,它将通过ref传递,因此任何更改都将反映在函数之外。那么为什么要将myApp“注入”到内部呢Knockout.js 敲除依赖注入,knockout.js,Knockout.js,我刚刚在一本优秀的KO手册中看到了一个在自调用函数中创建新类的示例,其方式不应污染全局名称空间。 我无法理解为什么他们将myApp当前名称空间发送到内部作用域,如果它存在于外部作用域中的话。据我所知,如果您向js函数发送一个对象,它将通过ref传递,因此任何更改都将反映在函数之外。那么为什么要将myApp“注入”到内部呢 window.myApp = {}; (function (myApp) { function Product() { var self = this;
window.myApp = {};
(function (myApp) {
function Product() {
var self = this;
self.sku = ko.observable("");
self.description = ko.observable("");
self.price = ko.observable(0.00);
self.cost = ko.observable(0.00);
self.quantity = ko.observable(0);
}
myApp.Product = Product;
}} (window.myApp));
谢谢 我可以想出这些理由来确定变量的范围 让缩微器在函数内将变量替换为较短的名称。 如果全局变量被覆盖,请保留对原始对象的引用。 防止范围内的局部变量全局可访问,类似于2。 也就是说,在这个简单的案例中,这可能不是一个问题 例如,原因1:
window.myApp = {};
(function (x) {
function Product() {
var self = this;
self.sku = ko.observable("");
self.description = ko.observable("");
self.price = ko.observable(0.00);
self.cost = ko.observable(0.00);
self.quantity = ko.observable(0);
}
x.Product = Product;
}} (window.myApp));
例如,原因2:
window.myApp = {};
(function (myApp) {
myApp.counter = 0;
function Product() {
// removed for clarity.
myApp.counter++;
}
// Code that depends on the myApp (global) varible.
// It will break if anyone overwrites the global variable.
myApp.Product = Product;
}} (window.myApp));
window.myApp = {}; // Will break the scoped code if it wasn't scoped.
例如,原因3:
window.myApp = {};
(function (myApp) {
var counter = 0;
function Product() {
// removed for clarity.
counter++;
}
myApp.Product = Product;
}} (window.myApp));