javascript 里子类型的构造函数的实例为什么不能向父类型的构造函数实例传递参数?

查看:97
本文介绍了javascript 里子类型的构造函数的实例为什么不能向父类型的构造函数实例传递参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.ob = job;
}

function Man(name,age,job,mustache){
    this.mustache = mustache;
    Man.prototype = new Person(name,age,job);
}

var m = new Man('Anthony',27,'PE');
m.name;//undefined

这里的m.name 是undefined 的,但是可以确定的是在构造函数体内是可以访问构造函数本身的原型的,如下:

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.ob = job;
    if(typeof this.sayName != 'undefined'){
        Person.prototype.sayName = function(){
           alert(this.name)
        }
    }
}

var p = new Person('anthony',29,'PE');
p.sayName();//anthony

解决方案

这道题有点‘君生我未生,我生君已老’的意思吧。
你大可以在后面再生成一个Man的实例,查看它的name属性

function Man(name,age,job,mustache){
    // 当执行 m = new Man(); 的时候,`this.__proto__ = Man.prototype`
    // 是在这里执行的,所以下面改变Man.prototype并没有什么效果。
    this.mustache = mustache;
    Man.prototype = new Person(name,age,job);
}
var m = new Man('anthony1',29,'PE');
m.name; // "undefined"
var b=new Man()
b.name//27

在生成m实例的时候,Man.prototype还不是一个Man的实例。其后再生成一个Man实例时,Man.prototype已经变成你前面设置的样子。

这篇关于javascript 里子类型的构造函数的实例为什么不能向父类型的构造函数实例传递参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆