做网站要在vs安装什么,企业seo推广,wordpress文章保存图片不显示图片,中恒建设职业技术培训学校网站这些年也面试了一些外包同事#xff0c;不知道其他面试官的想法#xff0c;但就我而言#xff0c;我更喜欢听到的是口述代码的方式#xff1a;
比如下述代码
function Animal(age) {this.age age; // 设置新对象的属性
}const cat new Animal(8);最有效的回…这些年也面试了一些外包同事不知道其他面试官的想法但就我而言我更喜欢听到的是口述代码的方式
比如下述代码
function Animal(age) {this.age age; // 设置新对象的属性
}const cat new Animal(8);最有效的回答就是把如下的代码跟面试官口述一下
// 相当于/*1. const cat {};2. cat.__proto__ Animal.prototype;3. Animal.call(cat, 8);4. 返回 cat*/
console.log(cat.age); // 8主要做了什么呢
new Animal(“8”) 创建了一个空对象 {}。把这个空对象的“内部指针”指向 Animal.prototype这就是 proto 的作用。把 this 绑定到这个新对象上执行函数体给对象加了 age 属性。返回这个新对象赋值给 cat
那么__proto__和prototype有什么区别
prototype是函数都会有的一个属性对象它包含了通过这个构造函数创建的实例可以拥有的属性和方法new对象时新对象的__proto__原型会指向Animal构造函数的prototype。proto__是对象普通对象、数组、函数等的一个隐藏属性它指向了Animal构造函数的prototype原型对象如访问cat对象时如果某个属性找不到它就会沿着__proto去找Animal.prototype。
call如何理解
call()、apply()、bind() 都是用来重定义 this 这个对象的call 的参数是直接放进去的第二第三第 n 个参数全都用逗号分隔bind 除了返回是函数以外它 的参数和 call 一样apply 的所有参数都必须放在一个数组里面传进去
const obj {name: cat,age: this.age,fun: function(fromCity, toCity) {console.log(this.name this.age, fromCity, toCity)}
}
const toThis {name: dog,age: 18
}obj.fun.call(toThis,深圳,南通) // dog18 深圳 南通
obj.fun.apply(toThis,[深圳,南通]) // dog18 深圳 南通
obj.fun.bind(toThis,深圳,南通)() // dog18 深圳 南通 原型链和this指向是老生常谈的知识点反复看更容易记忆。