请问以下JS代码的输出是? 935、 ['read', 'write']

发布时间 2023-11-10 15:33:19作者: 龙陌
function father() {
  this.num = 935;
  this.work = ['read', 'write', 'listen'];
}
function son() {}
son.prototype = new father();
let son1 = new son();
let son2 = new son();
son1.num = 117;
son1.work.pop();
console.log(son2.num);
console.log(son2.work);

需要明确写操作和读操作的不同,关于num变量是一个写操作的过程,所以当发现实例son1本身没有num变量时直接新增num变量且赋值为117,并不会涉及到原型链上,因此不会影响下次实例化num的值。
而数组的修改并没有影响到数组的引用,所以可以看成是读操作然后在原型链上修改,与实例本身无关,除非是直接给数组赋值来修改掉其引用,因此会影响到下次实例化数组的值。

function father() {
   this.num = 935;
   this.work = ['read', 'write', 'listen'];
 }

 function son() {}

 son.prototype = new father(); //相当于son.prototype = father.prototype

 let son1 = new son(); //相当于 new father()

 let son2 = new son();
 son1.num = 117;  //设置自己的num
 son1.work.pop(); //自己没有work找到原型的work
 console.log(son2.num); //找num 自己没 找原型的num 所以为935
 console.log(son2.work);//找work自己没 找原型的work 因为之前pop了一次 所以为['read','write']