关于Javascript的构造函数

发布于 2022-09-03 01:20:08 字数 410 浏览 12 评论 0

    function Animal(name){
        this.name = name; 
   } 
    function Dog(sex){
        this.sex=sex; 
    }  
    Dog.prototype = new Animal(); 
    //Dog.prototype.constructor = Dog; 
    var xiaohuang = new Dog("male");

通过Dog.prototype指向Animal 实例以后,达到了继承的目的。但是目前new Dog的实例的构造函数都是指向的Animal。
但是new Dog时,this.sex还是执行了。也就是真正的还是用Dog函数执行的构造。只是记录的构造函数是Animal。
这个机制是不是有点变态?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

平安喜乐 2022-09-10 01:20:08

短短一段话几乎每一句都是槽点,如果你的知识是从某本书学来的,赶紧扔了它吧。

Dog.prototype指向Animal以后

不,Dog.prototype 指向的不是 Animal 而是 Animal 的实例对象,因为你用的是 new Animal()

目前new Dog的实例的构造函数都是指向的Animal

不,很显然不是这样的,你自己都在倒数第二行的注释里写出了真相,又是如何得出以上结论的呢?


嗯,你在评论里的回复我看到了,你说的是对的,我上面的回答并没有仔细审题,非常抱歉。下面我阐述一下这个问题

首先,new Animal() 产生的实例对象,其 constructorAnimal,这个很确定。

其次,Dog 的原型对象被你指向了 new Animal()

因此,new Dog() 实例对象的 __proto__ 就成了 new Animal(),当我们向其询问 constructor 时,答案是 Animal,没有问题。

但是new Dog时,this.sex还是执行了

当然要执行了!当你 new Dog() 的时候,调用的就是 Dog 构造函数,不执行 this.sex 赋值又应该执行什么呢?

所以这个机制完全没有什么“变态”一说,是你的理解根本就跑偏了,完全没在点子上。

那支青花 2022-09-10 01:20:08

很正常啊, 实例化一个子类,子类的构造函数当然会调用。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文