搜索
javascript - 问个原型问题,有点蒙了
PHP中文网
PHP中文网 2017-04-10 16:22:17
[JavaScript讨论组]

<script>

Function.pototype={
        eat:function(){
            console.log("说话");
        }
    }
    
    function Person(name,age){
        this.name=name;
        this.age=age;
        this.country=function(){
                console.log(this.name+"来自"+country);
            };
    }

    Person.eat();

</script>

    *****为什么最后报错说 eat()不是一个function啊?*****
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
PHP中文网

改成这样吧:

Function.prototype.eat = function(){
    console.log("说话");
};
黄舟

你在Console里面试一下就会知道,对Function.prototype赋值并没有产生效果。写完了Function.prototype还是{},所以你调用Person.eat当然会失败。

怪我咯

首先prototype打错了。。。另外我在控制台试着打印Function.prototype发现返回的是一个空函数,不是一个对象,所以你这样赋值应该是错的。

阿神

传送门自己看看吧

大家讲道理

因为类似于Object.prototypeFunction.prototype等是不可以更改的,就类似与下面的这个obj对象的x属性:

  var obj = {},
      a = {x: 1};
  Object.defineProperty(obj,'x',{
      enumerable: false,
      configurable: false,
      writable: false,
      value: a
  });
  obj.x = {};
  console.log(obj.x === a);   // 还是a对象
  console.log(obj.x.x);   // 20,这个对象可以更改
怪我咯

Person.prototype.eat=function(){

        console.log("说话");
    }

function Person(name,age){
    this.name=name;
    this.age=age;
    this.country=function(){
            console.log(this.name+"来自"+country);
        };
}

Person.eat();

我不懂你什么意思,是这个吗

迷茫

我觉得楼上几个说法倒是没错 不过楼主你新定义的构造函数貌似没有继承原型函数……楼上的答案加上我说的这个应该是可以输出了

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

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