移动端网站的优点,陕西建设厅官方网站,wordpress 文章底部作者,网络营销有哪些推广平台面向对象要解决的问题提到面向对象#xff0c;大家的第一反应就是封装、继承和多态。对其做如下解释#xff1a;封装#xff1a;影藏细节#xff08;A对A——将多行代码取个名字或A对B——API调用合作#xff09;继承#xff1a;继承的意思就是同上跟上述一样#xff0c…面向对象要解决的问题提到面向对象大家的第一反应就是封装、继承和多态。对其做如下解释封装影藏细节A对A——将多行代码取个名字或A对B——API调用合作继承继承的意思就是同上跟上述一样直接用另外一件事情的属性和方法只需要写自己需要的属性和方法即可。多态一个东西拥有两种或者多种东西的属性因此封装使我们减少沟通成本也减少思维负担继承可以让我们复用代码而多态可以使一个东西更加灵活。封装、继承、多态并不是面向对象终极需求而是写代码的套路问题定势思维封装和继承JS中跟类对应的叫做构造函数JS的七种数据类型NumberStringboolundefinednullsymbol存的是值object复杂类型、引用类型、对象存的是内存地址。而Object包括如下三种情形普通对象数组函数重中之重原型链对象与对象var 如上定义一个obj我们可以访问name和age但是我们可以访问obj.toString()那么toString方法来自哪里在控制台使用console.dir()可以看到toString方法来自__proto__。但是在编程中不要使用obj.__proto__来访问这样访问会造成很多性能上的降低。var 问若没有声明一个对象则怎么访问__proto__呢window中有一个Object使用window.Object可以得到规定在window.Object中必须有一个protoType去存声明对象的__proto__的内存地址因此可以通过window.Object.protoType得到跟声明对象中一致的__proto__window问原型链只能有一个吗怎么实现Array中有push而Object中没有push呢Array的__proto__和Object的__proto__不一样。Array的__proto__中有push、pop等方法而Array的__proto__的__proto__中有toString、valueOf等方法。如下图所示Array中的__proto__因此obj.__proto__.__proto__被称作原型链。大写的Object是天生就有的本身就有prototype属性的而小写的object是声明的Object必须声明之后才会有__proto__属性。var JS没有类只需要给每一个加一个__proto__属性就可以实现继承。this对象与函数函数是什么函数是一种可执行代码组成的对象。为什么说函数就是对象呢 函数的本质是字符串再加上一些其他的东西。var var 但是我们还是觉得很智障为什么要在写过之后还要传参进去那么我们是否可以不传参数访问该对象呢按照obj.sayName()即可访问呢那么问题来了。在上述的对象中sayName中是有参数的为什么在调用的时候不需要传入了呢因此js引入了this表示自己。改造成如下var 再看一个。var 函数是独立的东西不是一个附属品只接受一个输入并且有一个输出。在不使用call的时候this会隐式的传进去则不能很快速明确的确定this的指代。JS中有两个参数一个是this另一个是arguments。显式的this则使用call调用隐式的this则浏览器去猜。从上述可以得出如下两个结论参数的值只有在传参的时候确定this是第一个参数 推断得出 this的值只有在传参的时候才能确定。那么我们来看看如下的this都指代什么function 再看看别的this的指代情况。button以上仅限于隐式调用时this指代的情况。若写为button.onclick.call(1)则此时的this为传入的参数。为了解决this的事情js引入了箭头函数此时就算call也不会改变this的值。call的时候this指代的都为外面的this。箭头函数中既没有this也没有arguments。函数和对象本来没有关系通过隐式的this才会有了关系。若使用call则this是明确的值即为第一个传入的参数。bind用法bind用法bind即为创建了一个新的函数会call原先函数的参数传入的参数则为this和arguments。