基本对象结构和JavaScript调用

时间:2013-08-23 05:33:00

标签: javascript

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

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


Object1.function1();

7 个答案:

答案 0 :(得分: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)上查看有关面向对象原型的编程的更多信息:

答案 1 :(得分: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的方式与大多数其他语言完全不同,特别是在原型设计和闭包方面。

THIS是基础知识的一个不错的链接,但我也推荐经典" JavaScript:The Good Parts"同样。

答案 2 :(得分: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

答案 3 :(得分: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,所以为什么不使用今天发布的功能,当它出现时,你可以只改变打字稿的类型扩展名到javascript。如果您只是想了解它的工作原理,请查看here

演示:

这是来自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的官方网站了解更多信息。

答案 4 :(得分:1)

你可以这样做:

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

var Object1 = new Class1()
Object1.Function1();

答案 5 :(得分:0)

我认为这就是你想要的。

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

Object1.Function1();

答案 6 :(得分:0)

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

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

var myObj  = {"func":myFunc};

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