2

代码在这里:

Father.js

(function(){
function father(){

};
father.prototype.init = function(){
    console.log('father');
}
})()

Child.js

(function(){
function child(){

}

child.prototype.init = function(){
    console.log('child');
}

var father = new father();
 })()

我有 2 个问题:如何在脚本标记或我创建的任何第三个 javascript 文件之间调用父对象或子对象?第二:如何在子类中调用父对象。我是 JS 新手,在 javascript 中遇到了一些 OOP 问题。非常感谢您的帮助

4

3 回答 3

4

您应该将匿名函数的结果分配给一个变量,这样您就可以使用它而不会泄漏 IIFE(立即调用函数表达式)内部的内容,从而封装除构造函数之外的所有内容:

var Father = (function(){

  // Private stuff...

  function Father(){}

  Father.prototype.something = function(){};

  return Father; // Public constructor
}());

现在您可以Father在您的Child类中使用,或者更好的是,使用相同的模式,但将父类作为参数传递给 IIFE:

var Child = (function(_parent){

  function Child() {
    _parent.apply(this, arguments); // inherit properties from Parent class
  }

  Child.prototype = Object.create(_parent.prototype); // inherit Parent prototype

  Child.prototype.something = function(){};

  return Child;
}(Father));
于 2013-07-13T03:23:03.797 回答
0

我设置了一个小提琴:http: //jsfiddle.net/J75Zz/

你“分发”你的代码有多少 .js 文件并不重要,它只是“一个代码块”,它被执行(嗯,几乎......)。

father您应该用大写字母命名对象,对象和变量之间已经存在冲突father

于 2013-07-13T03:20:34.297 回答
0

问题一的答案是您在全局范围内定义父亲和孩子:

function father(){
};
father.prototype.init = function(){
    console.log('father');
}
function child(){
}
child.prototype.init = function(){
    console.log('child');
}
// can't name your var father because it'll overwrite the father function
var dad = new father();

您可以使用命名空间来限制全局范围内的变量数量:

在father.js中:

var myApp=myApp || {};
myApp.father=...

在 child.js 中:

var myApp=myApp || {};
myApp.child=...
var dad = new myApp.father();

要在孩子中调用父亲对象,您可以father.call(this);将父亲函数中的所有父亲属性定义为this.someprop=...刚刚创建的孩子的一部分。如果您只想访问名为 dad 的父亲实例(参见上面的代码),那么您可以这样做dad.init()

更多关于继承和原型的信息:

原型继承 - 编写

于 2013-07-13T03:13:04.623 回答