我正在尝试做一些非常简单的事情。也就是说,使用我可以从其他地方调用的函数创建一个对象。我肯定错过了什么。我现在正在尝试的代码是:
function Object1() {
function function1() {
alert("hello");
}
}
Object1.function1();
我正在尝试做一些非常简单的事情。也就是说,使用我可以从其他地方调用的函数创建一个对象。我肯定错过了什么。我现在正在尝试的代码是:
function Object1() {
function function1() {
alert("hello");
}
}
Object1.function1();
我想你会喜欢这个的
var Object1 = function(name) {
this.name = name;
};
Object1.prototype.function1 = function(prefix) {
console.log(prefix + " " + this.name);
};
var obj = new Object1("naomi");
obj.function1("hello");
//=> "hello naomi"
私有数据成员的附加演示
Object1.prototype.otherFunction = function() {
// private variable
var count = 0;
// private function
var incrementCounter = function() {
count += 1;
};
return incrementCounter();
};
obj.otherFunction(); //=> 1
obj.otherFunction(); //=> 2
obj.otherFunction(); //=> 3
只是为了好玩,这里也有一个子类!
var Object2 = function(name, numberOfCats) {
// call parent constructor
Object1.call(this, name);
this.numberOfCats = numberOfCats;
};
// setup prototype chain
Object2.prototype = Object.create(Object1.prototype, {constructor: {value: Object2}});
// an object2 public instance method
Object2.prototype.sayHello = function() {
console.log(this.name + " has " + this.numberOfCats + " cats");
};
用法如您所愿
var obj2 = new Object2("naomi", 3);
obj2.sayHello()
//=> "naomi has 3 cats"
我们来自 Object1 的方法也是继承的
obj2.function1("hi my name is");
//=> "hi my name is naomi"
还有私人的
obj2.otherFunction(); //=> 1
obj2.otherFunction(); //=> 2
我相信这是实现您想要的最佳方式。
var Thing = (function () {
function Thing(varOne) {
this.varOne = varOne;
}
Thing.prototype.saySomething = function () {
console.log(this.varOne);
};
return Thing;
})();
var app = new Thing("Cheese");
app.saySomething();
如果你想在 JavaScript 中使用对象和类,我可以冒昧地推荐 TypeScript 吗?它可以编译成普通的旧 javascript,并且可以与您现有的 javascript 代码一起使用。
现在有些人可能会认为这是一个根本性的变化。它真的不是。它只是带有类的 JavaScript,并且由于它是 Javascript 的超集,它可以使事情变得无限容易。此外,当 ECMAScript 6 发布时,Typescript将是全功能的 javascript,所以为什么不使用今天即将发布的功能,当它发布时,您只需将类型扩展从 typescript 更改为 javascript。如果您只是想看看它是如何工作的,请看这里。
演示:
这是来自 nodejs 控制台。
> var Thing = (function () {
... function Thing(varOne) {
..... this.varOne = varOne;
..... }
... Thing.prototype.saySomething = function () {
..... console.log(this.varOne);
..... };
... return Thing;
... })();
undefined
> var app = new Thing("Cheese Cake");
undefined
> app.saySomething();
Cheese Cake
undefined
>
我使用 Typescript 生成了上面的 js 代码,这就是 Typescript 的样子:
class Thing {
constructor( public varOne: string) {}
saySomething (): void {
console.log(this.varOne);
}
}
var app = new Thing("Cheese");
app.saySomething();
如您所见,语法更加简洁。你可以去 Typescript 的官网了解更多。
内部函数只是在父函数范围内实现的函数。它不是整个对象的成员。
通常你这样做:
function Object1() {
}
Object1.prototype = {
function1: function () {
alert("hello");
}
};
var obj = new Object1();
obj.function1();
需要注意的是,这是使用构造函数的原型Object1
,因此这种方法将允许对象继承:
var Object2 = Object.create({ function2: function() { } }, Object1.prototype);
在 Mozilla Developer Network (MDN) 上查看更多关于面向对象的基于原型的编程:
此功能将是“私有的”。
要使其可公开访问,您需要执行以下操作:
function Object1()
{
this.Function1 = function()
{
alert("hello");
}
}
var thingy = new Object1();
thingy.Function1();
同样,要创建私有变量,您将使用:
function Object1()
{
var myPrivateVariable = 'something';
}
而公共变量将是:
function Object1()
{
this.myPublicVariable = 'something';
}
尽量避免将一堆变量声明为全局变量,当您忘记直接声明它们时会意外发生:
function Object1()
{
globalVariable = 'oops';
}
JavaScript 处理 OOP 与大多数其他语言有很大不同,尤其是在原型设计和闭包方面。
这是一个不错的基础链接,但我也推荐经典的“JavaScript: The Good Parts”。
你可以这样做:
Class1 = function () {
this.Function1 = function() {
alert("hello");
}
}
var Object1 = new Class1()
Object1.Function1();
我想这就是你想要的。
var Object1 = {
Function1: function() {
alert("hello");
}
}
Object1.Function1();
正如您所说,您想在该对象中创建一个对象和一个函数,这就是应该如何完成的:-
var myFunc = function() {
alert("Hello");
}
var myObj = {"func":myFunc};
现在您可以使用:-myFunc.func();