这是工作小提琴:JsFIDDLE
作为大多数 jQuery 开发人员,这是您无法理解的:JavaScript 范围。
基本上,为了通过 访问属性this
,它必须嵌套在Object.prototype
.
更正
当您内联定义对象属性时,调用this
仍将指向正确的对象。然而,我给你的模式虽然不太流行,但它是一种更整洁、更好的方法。
这prototype
是OOP的JavaScript方式。如果您正在寻找可靠的 OOP 风格的 JS 以及正确定义模型、提高代码可维护性和更好的编码风格,最好使用我给您的模式定义类,因为它可以让您在静态函数之间做出明显的区分和班级。这也是 JavaScript 的自然流程,一切都是对象。
在高级 JavaScript 编程(强大的 Ajax 应用程序或由于某种原因浏览器必须执行更高级计算的应用程序)中,始终首选以下样式。放置在命名空间下的静态函数仍然单独定义:
var namespace = {};
namespace.firstStaticFunc = function() {/*do stuff etc;*/};
namespace.secondStaticFunc = function() { return !1; };
使用定义模式的唯一原因是枚举和哈希映射。例如:
var typesOfChicken = {
RED: 'red',
BLUE: 'blue'
};
以上始终用于国际化和避免硬编码值之类的事情。此外,它可以帮助 JS 缩小器更好地工作。鉴于上述情况,您可以说:
console.log(typesOfChicken.RED);// will print red.
console.log("red");// wil still print red
但是,当我想将红色更改为其他东西时,使用枚举我只需要进行一次更改。此外,缩小器可以替换typesOfChicken.RED
为 ab,而"RED"
始终为“RED”。这是不可缩小的。
var firstObject = function() { };
firstObject.prototype.myName = "Swapnesh Sinha";//this will not be nested as an instance property.
firstObject.prototype.sayHello = function() {
alert(this.myName);// will now correctly display Swapnesh Sinha
};
// to use your first object.
var instance = new firstObject();
instance.sayHello();
要正确使用范围,请使用我给您的模式,这是一种面向对象的模式,也是在 JS 中定义类的正确方法。
现在你有一个很好的方式来组织你的 JavaScript 代码,它更容易维护,范围更明显,最重要的是你可以立即区分静态函数和类。