javascript - js如何实现对象参数格式的继承?
怪我咯
怪我咯 2017-04-10 14:21:37
[JavaScript讨论组]

想用js的继承优化一段代码,但是发现,参数使用对象格式的,就不行。

我可不想在构造函数中按顺序来写参数。

var P=function(opts){
    this.name=opts.name;
    this.age=opts.age;
};
P.prototype={
    constructor:P,
    getName:function(){
        return this.name;
    },
    getAge:function(){
        return this.age;
    }
};
var S=function(opts){
    P.call(this,opts);
    this.address=opts.address;
};
S.prototype=new P();
S.prototype.constructor=S;
S.prototype.getAddress=function(){
    return this.address;
}

这个怎么破?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
迷茫

去掉这句代码

......
S.prototype=new P();
......

js面向对象这么写累死人,推荐[aralejs]http://www.aralejs.org/框架。
贴一个arale面向对象的hello world!
1、定义对象:

/* pig.js */
define(function(require, exports, module) {
    var Class = require('arale/class/1.1.0/class');

    var Pig = Class.create({
        initialize: function(name) {
            this.name = name;
        },

        talk: function() {
            alert('我是' + this.name);
        }
    });

    module.exports = Pig;
});

2、继承对象

/* red-pig.js */
define(function(require, exports, module) {
    var Pig = require('./pig');

    var RedPig = Pig.extend({
        initialize: function(name) {
            RedPig.superclass.initialize.call(this, name);
        },

        fly: function() {
            alert(this.color + "猪飞起来了");
        },

        color: '红色'
    });

    module.exports = RedPig;
});

3、使用对象

var RedPig = require('./red-pig');
var redPig = new RedPig("猪");
redPig.talk();
redPig.fly();

符合common.js规范。

天蓬老师

因为你在 S 的构造函数内已经 callP,于是也就已经有了 this.namethis.age,因此已经没有必要 new P() 赋给 S.prototype 了,所以把这一句去掉即可:

S.prototype = new P();
ringa_lee

尝试面向对象编程时也遇到题主的问题,翻看《JavaScript 高级程序设计》 第六章的组合继承,和题主是一样的,书中给出的参数是变量,如果想要以对象作为参数,在子类的原型 new父类的构造函数时,就报错了。问题就出在这里,经过尝试,可以将 父类的原型直接赋值给子类的原型,

将S.prototype=new P(); 换成 S.prototype = P.prototype 

即可。但有一个严重的问题,就是引用类型的值在所有实例中共享。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号