1. 下面代码输出什么functionSetCount(count){this.countcount}SetCount.prototype.printCountfunction(){console.log(this.count)}letanewSetCount(100)a.count200a.__proto__.count300a.__proto__.printCount()a.printCount()解析让我们逐步分析这段代码 首先定义了一个构造函数 SetCount它接受一个参数 count 并将其赋值给 this.count。 然后在 SetCount 的原型上添加了一个 printCount 方法这个方法会打印 this.count。 创建了一个 SetCount 的实例 a初始 count 值为 100。 将 a.count 设置为 200。这会在 a 对象上直接创建一个 count 属性。 将 a.__proto__.count 设置为 300。这实际上是在 SetCount.prototype 上设置了 count 属性。 调用 a.__proto__.printCount()。这里直接在原型上调用 printCount 方法。在这种情况下this 指向 a.__proto__即 SetCount.prototype。因此它会打印原型上的 count 值也就是 300。 调用 a.printCount()。这里是通过实例 a 调用 printCount 方法。在这种情况下this 指向实例 a。因为 a 自身有 count 属性值为 200所以会打印 200。 重要的是要理解 JavaScript 的原型链和 this 的绑定机制 当通过对象调用方法时this 通常指向该对象。 属性查找首先在对象自身进行如果没找到则沿着原型链向上查找。 直接在 __proto__ 上调用方法会改变 this 的指向。2. 请实现一个方法可求出数组的的最大值和最小值请实现一个方法可求出数组的的最大值和最小值例如[2,3] - 3, [4,3] - 4functiongetMaxOrMin(arr,type1){// type: 1为求最大值0或其他不为1的数字为求最小值if(type1){constresarr.sort((a,b){returnb-a})returnres[0]}else{constresarr.sort((a,b){returna-b})returnres[0]}}3. 请实现一个或多个方法能将字符串中重复的部分去重请实现一个或多个方法能将字符串中重复的部分去重例如‘hello’ - ‘helo’functiondeduplication_one(data){if(typeofdata!string)returnletarrdata.split()letsetnewSet(arr)return[...set].join()}functiondeduplication_two(data){if(typeofdata!string)returnletarrdata.split()letobj{}letresultfor(leti0;iarr.length;i){letchararr[i]if(!obj[char]){// 判断该字符是否已经存在obj[char]trueresultchar}}returnresult}4. 请用不少于2种继承方式实现Child继承Parent5. 请回答以下console输出结果varnameTom;(function(){if(typeofnameundefined){varnameJackconsole.log(Goodbye ,name)}else{console.log(Hello ,name)}})()// Goodbye Jack// 立即执行函数可以创建一个作用域保护私有变量不会污染全局变量内部无法直接访问外部变量。vara10;(function(a){console.log(a);a5;console.log(window.a)vara20;console.log(a)})()// undefined// 10// 20// var定义的变量可以挂载到window下functionchangeObjProperty(o){o.siteUrlhttps://www.example.comonewObject();o.siteUrlhttp://example.com}letwebSitenewObject();changeObjProperty(webSite)console.log(webSite.siteUrl);// https://www.example.com// 在函数中首先修改了对象 o 的 siteUrl 属性为 https://www.example.com// 然后又新建了一个对象 o 并修改了其 siteUrl 属性为 http://example.com但这个新建的对象 o 只在函数内部有效// 不会影响到外部的 webSite 对象。// 因此最终输出的是在函数内部修改过的 webSite 对象的 siteUrl 属性即 https://www.example.com。6. 完成下列不等式classA{}classBextendsA{}constanewA()constbnewB()a.__proto__b.__proto__B.__proto__B.prototype.__proto__b.__proto__.__proto__// 解答console.log(a.__proto__A.prototype);console.log(b.__proto__B.prototype);console.log(B.__proto__A);console.log(B.prototype.__proto__A.prototype);console.log(b.__proto__.__proto__A.prototype);7.请写出以下代码运行的结果functionPerson(){}varperson1newPerson()varperson2newPerson()Person.prototype.getNamefunction(){returnthis.name}Person.prototype.nametomperson1.namejerryvarnameperson2.getName()console.log(name)// tom// 因为在Person的原型对象上定义了getName方法和name属性// 并将name属性的值设置为tom。在实例化person2时// 没有为其单独设置name属性因此调用getName方法时返回的是原型对象上的name属性值tom。// 而在实例化person1时单独为其设置了name属性值为jerry// 但是调用getName方法时this指向的是person1实例因此返回的是person1的name属性值jerry。setTimeout((){console.log(1)},0)newPromise(functionexeculor(resolve){console.log(2)for(vari0;i10000;i1){i9999resolve()}console.log(3)}).then(function(){console.log(4)})console.log(5)// 2 3 5 4 1asyncfunctionasync1(){console.log(async1 start)awaitasync2()console.log(async1 end)}asyncfunctionasync2(){console.log(async2)}console.log(script start)setTimeout((){console.log(setTimeout)},0)async1()newPromise(function(resolve){console.log(promise1)resolve()}).then(function(){console.log(promise2)})console.log(script end)// script start async1 start async2 promise1 script end async1 end promise2 setTimeout