本节代码问题

本节代码问题

function add(num1,num2){
    return num1+num2;
  }
  add.sex="male";
  add.setSex=function(sex){
    this.sex=sex;
    return sex;
  };
  console.log("add.sex");
  console.log( add.setSex("female"));
  console.log(add);

console.log(add)只是function add(num1,num2){
   return num1+num2;
 }                add.sex和add.setSex去哪了

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
海纳百川_ 2017-12-10 13:07:48

我是这么理解的,js中不是一切皆是对象吗,那就是都可以通过.添加成员属性和方法。但是add直接声明的是个函数,这种直接声明的数据类型比它本质(也可以理解为默认)的数据类型,优先级要高,所以打印出来的add是函数,但是你赋值给它的成员属性和方法还是可以输出的:console.log(add.sex);。

海纳百川_ 2017-12-08 16:55:41

 一切皆对象,但是你这种写法,就还是个函数,你可以这样写:

<script>
    var add={};
    add.sex="mail";  
    add.sex = "male";
    add.setSex = function(sex) {
        this.sex = sex;
        return sex;
    };
    console.log(add.sex);
    console.log(add.setSex("female"));
    console.log(add);
 </script> 


  • 提问者 慕婉清8744191 #1
    对象的这种写法我知道,但是我想说在一个函数外部给函数添加一个函数本身没有的属性,打印这个函数,并没有包含我所添加的这个属性 ,那么这个属性去哪了呢?还是说我添加的这个属性不会添加在这个函数当中,只有打印 console.log(函数.属性) 才能显示。 你可以打印下我在问题中的那个代码console.log(add) 只显示add本身,且不包含add.sex和add.setSex这两个。
    2017-12-09 13:06:30
提问者 慕婉清8744191 2017-12-08 15:48:33

不是,我想说的是本身定义一个对象var tom={name:“tom”},然后添加一个属性tom.sex="male",打印这个对象tom,是包含name和sex这两个属性 ,tom改变了。  既然说函数有对象的性质,我在add.sex=“male”;  那么不会改变add这个函数吗,为什么我console.log(add),仍然是function add(num1,num2){ return num1+num2;} (这里面当中没有sex) 。我给他添加的add.sex为什么不打印出来?(并不是直接打印add.sex,而是打印add!!)

小丸子爱吃菜 2017-12-08 14:10:35

1、 console.log("add.sex");这个是字符串,所以你打印的就是字符串。

2、add.setSex后面赋值的是一个函数,函数的返回值就是你传入的参数。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师