js中的函数与对象

学习js始终理解不了函数与对象的关系,所以学习js感觉很难懂里面的思想
看例子

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

var person=new Person("fang","男",88);
//那么person就能拿到name,sex,age这三个属性

那么接着看下面的

Person(){}
var person=new Person();
person.sex="男";
person.name="fang";
person.age=55;
alert(person.age);//55

感觉很苦恼,没有声明的属性直接就能设置,同时还能直接使用,这很难理解
下面是我的理解(错了勿喷,新人)
在书中看到,我们可以为对象添加属性,也可以为基本类型添加属性,但是基本类型添加的数据无法使用

 var number=20number.sex="女";
 alert(number.sex);

会打印undefined,其实这也可以理解
因为基本类型这是数据类型,并不是对象,即不是一个对象,那么就不会存在属性,
那么分析一下下面这个代码

Person(){}
var person=new Person();
person.sex="男";
person.name="fang";
person.age=55;
alert(person.age);//55

直接添加属性并赋值,且能够打印,那么说明person是个对象
接着我尝试了一下

 alert(Person instanceof Object);

打印的true,也就代表者person是对象,那么添加属性就正常了
不声明直接添加属性,在我看来,就是先声明了

sex,age,name这三个属性,之后将这三个属性绑定到person实例上
(这是我的猜测),但是也有理论来源

看下面

<script>
    var name="fang";
  window.age=11;
   alert(name);
  alert(window.name);
  alert(age);
  alert(this.age);
  alert(window.age);
</script>

看着好奇怪,但是都会打印正确结果
当我们在script申明变量时,会加入到当前的环境中成为属性,全局环境本身就是
window对象,所以加入到了window对象上,同时this指向当前的环境对象,也就会打印同样的结果

接下来看另一个例子

function Person(){};

Person.sex="fang";

alert(Person.sex);//fang

这个我们会好奇,不过测一下就知道了

  alert(Person instanceof Object);//true

打印的结果为true,也就可以添加属性了

猜你喜欢

转载自blog.csdn.net/qq_37657081/article/details/79507596