0

我正在尝试做一些非常简单的事情。也就是说,使用我可以从其他地方调用的函数创建一个对象。我肯定错过了什么。我现在正在尝试的代码是:

function Object1() {
    function function1() {
        alert("hello");
    }
}


Object1.function1();
4

7 回答 7

2

我想你会喜欢这个的

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
于 2013-08-23T05:45:36.257 回答
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 的官网了解更多。

于 2013-08-23T05:45:52.163 回答
2

内部函数只是在父函数范围内实现的函数。它不是整个对象的成员。

通常你这样做:

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) 上查看更多关于面向对象的基于原型的编程:

于 2013-08-23T05:36:24.023 回答
2

此功能将是“私有的”。

要使其可公开访问,您需要执行以下操作:

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”。

于 2013-08-23T05:42:01.657 回答
1

你可以这样做:

Class1 = function () {
    this.Function1 = function() {
        alert("hello");
    }
}

var Object1 = new Class1()
Object1.Function1();
于 2013-08-23T05:36:11.207 回答
0

我想这就是你想要的。

var Object1 = {
    Function1: function() {
        alert("hello");
    }
}

Object1.Function1();
于 2013-08-23T05:36:18.803 回答
0

正如您所说,您想在该对象中创建一个对象和一个函数,这就是应该如何完成的:-

var myFunc = function() {   
    alert("Hello");
}

var myObj  = {"func":myFunc};

现在您可以使用:-myFunc.func();

于 2013-08-23T05:36:55.503 回答