当前位置:首页 > Web开发 > 正文

JS结构函数道理与原型

2024-03-31 Web开发

1.创建东西有以下几种方法:

①.var obj = {};

②.var obj = new Object();

③.自界说结构函数,然后使用结构函数创建东西

 【结构函数和普通函数的区别:函数名遵循大驼峰式定名法则,凡是我们使用结构函数创建东西】

2.结构函数内部道理

 ①.在函数体内部隐式的加上 var this = {}【固然这个var this={}实际上是在AO东西中创建的!】

②.执行this.xxx = xxx;

③.隐式的返回this

代码如下所示:

1 <script type="text/javascript"> 2 function Student(name,age,sex){ 3 /* var this = { 4 name:"", 5 age: 6 }; */ 7 this.name = name; 8 this.age = age; 9 this.sex = sex; 10 this.grade = 2017; 11 12 //return this; 13 } 14 15 var student = new Student(‘zhangsan‘,13,‘male‘); 16 </script>

【需要出格注意:结构函数需要发明new关键字之后才会有结构函数的上面的三步走道理,否则结构函数就和一个普通的函数一样,没啥区别!】

1 <script type="text/javascript"> 2 function Student(name,age,sex){ 3 //var this = {} 4 this.name = name; 5 this.age = age; 6 this.sex = sex; 7 this.say = function(){ 8 console.log(this.name); 9 } 10 //return this 11 } 12 13 var student = new Student(‘zhangsan‘,13,‘male‘); 14 student.say(); 15 16 </script>

而且,一旦我们new一个结构函数来创建东西,那么这个函数不成以返回一个原始值【如果我们返回一个原始值,那么结构函数是会忽略失这个原始值的,直接返回隐式的this东西】,但是可以返回一个东西、数组等非原始值!

如下代码所示:

1 <script type="text/javascript"> 2 function Student(name,age,sex){ 3 //var this = {} 4 this.name = name; 5 this.age = age; 6 this.sex = sex; 7 this.say = function(){ 8 console.log(this.name); 9 } 10 //return this 11 } 12 13 var student = new Student(‘zhangsan‘,13,‘male‘); 14 </script>

在控制台上我们输入student,就可以检察该student东西,如下所示:

技术图片

固然,即使是我们显示的返回this,或者{}、或者一个数组[]等非原始值都是没有问题的,如下所示:

 View Code

技术图片

但是如果我们在结构函数里面返回的是一个原始值,如:123功效就会看到我们在控制台上找student东西的时候并不是显示123,而是显示的隐式this东西的内容,这是因为结构函数是不允许使用原始值作为函数的返回值的,既是是结构函数返回了一个原始值,那么这个原始值也会被忽略,而返回this东西,所以这里有问题,如下所示:

 View Code

技术图片

3.包装类

  ①.new String();

②.new Boolean()

③.new Number()

注意:在javascript中有两种数字【123,new Number(123)也即:原始值123、东西123】和两种字符串【原始值""字符串、东西字符串new String()】、以及两种boolean值【原始布尔值true或者false、东西布尔值true或者false】

之所以讲有两种数字和两种字符串是因为原始值字符串和原始值数字是不成以有属性和要领的,而东西数字和东西字符串才是可以有属性和要领的!而且东西数字也是可以直接参预运算的,但是运算完成之后就成了原始值了,就不是东西了!上述对付字符串和布尔值也是适用的!

注意:原始值是不能加属性的,但是如下代码是怎么回事呢?

 View Code

不是说原始字符串没有属性和要领么,为啥这里可以打印出str.length的属性值呢?

再来一个:

 View Code

不是原始数值不成以加属性么,为什么console.log(num.len)没有错误呢?

以上这两种情况都是由于包装类的原因【切记:原始值是没有属性和要领的!】

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30949.html