Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript对象文本进行继承?_Javascript_Oop_Inheritance - Fatal编程技术网

如何使用JavaScript对象文本进行继承?

如何使用JavaScript对象文本进行继承?,javascript,oop,inheritance,Javascript,Oop,Inheritance,您好,我在使用对象文字语法声明对象原型时遇到了一个如何进行继承的问题 我做了两把小提琴来帮助你帮助我 这是我的基类,几乎所有对象在我的应用程序中都是这样定义的: Base = function(param){ this.init(param); } Base.prototype = { init: function(param){ this.param = param; }, calc: function(){ var re

您好,我在使用对象文字语法声明对象原型时遇到了一个如何进行继承的问题

我做了两把小提琴来帮助你帮助我

这是我的基类,几乎所有对象在我的应用程序中都是这样定义的:

Base = function(param){
    this.init(param);
}
Base.prototype = {
    init: function(param){
        this.param = param;
    },
    calc: function(){
        var result = this.param * 10;
        document.write("Result from calc in Base: " + result + "<br/>");
    },
    calcB: function(){
        var result = this.param * 20;
        document.write("Result from calcB in Base: " + result+ "<br/>");
    }
}
Base=函数(参数){
this.init(param);
}
Base.prototype={
初始化:函数(参数){
this.param=param;
},
计算:函数(){
var结果=this.param*10;
文件。写入(“计算结果在基础:“+Result+”
”); }, calcB:function(){ var结果=this.param*20; 文档。写入(“来自calcB的结果,在底部:“+Result+”
); } }
这就是我如何成功地在Base中扩展和重写方法的原因:

Extend = function(param){
    this.init(param);
}
Extend.prototype = new Base();

Extend.prototype.calc = function(){
    var result = this.param * 50;
    document.write("Result from calc in Extend: " + result+ "<br/>");
}
Extend=函数(参数){
this.init(param);
}
Extend.prototype=newbase();
Extend.prototype.calc=函数(){
var结果=this.param*50;
文件。写入(“扩展计算的结果:“+Result+”
”); }
但我想使用与应用程序其余部分相同的样式,所以我开始使用对象文字,但这让我抓狂,eclipse和firebug对我的语法做出了无意义的响应

现在,我将如何将成功的扩展代码转换为对象文字样式? 这里是许多尝试中的一个(它不会编译,但会让您大致了解我希望代码的外观)

Extend=函数(参数){
this.init(param);
}
Extend.prototype={
:new Base(),
计算:函数(){
var结果=this.param*50;
文件。写入(“扩展计算的结果:“+Result+”
”); } }
您需要扩展原始原型,而不是将新对象指定为原型

function extend(original, extension) {
  for (var key in extension) {
    if (extension.hasOwnProperty(key)) {
      original[key] = extension[key];
    }
  }
};

var A = function () {};
var B = function () {};
B.prototype = new A();
extend(B.prototype, {
   methodName: function () {}
});
你想要的


我不明白你想干什么。JSON是一种文本数据格式,与对象继承无关。你是说JavaScript文字对象符号吗?这很可能就是我的意思,JavaScript的正确术语不是我的强项。这也是为什么我没有说JSON,而是说JSON风格。@Farmor“我想使用对象文字进行编程”。我对这个问题做了一些小的修改,将术语改为“对象文字”。还是应该是“文字对象”?我认为从现在开始应该是“objects literal”。在测试过程中,我发现IE8不支持ES5/Object。在IE8中打开小提琴可以很容易地验证这一点。我正在处理这个问题,并将返回一个解决方案。@Farmor
function extend(original, extension) {
  for (var key in extension) {
    if (extension.hasOwnProperty(key)) {
      original[key] = extension[key];
    }
  }
};

var A = function () {};
var B = function () {};
B.prototype = new A();
extend(B.prototype, {
   methodName: function () {}
});
Extend = function(param){
    this.init(param);
}
Extend.prototype = Object.make(Base.prototype, {
    constructor: Extend,
    calc: function(){
        var result = this.param * 50;
        document.write("Result from calc in Extend: " + result+ "<br/>");
    }
});
Object.make = function make (proto) {
    var o = Object.create(proto);
    var args = [].slice.call(arguments, 1);
    args.forEach(function (obj) {
        Object.getOwnPropertyNames(obj).forEach(function (key) {
            o[key] = obj[key];
        });
    });
    return o;
}