1、题目
function Fn() {
this.x = 100;
this.y = 200;
this.getX = function () {
console.log(this.x);
}
}
Fn.prototype.getX = function () {
console.log(this.x);
};
Fn.prototype.getY = function () {
console.log(this.y);
};
let f1 = new Fn;
let f2 = new Fn;
console.log(f1.getX === f2.getX);
console.log(f1.getY === f2.getY);
console.log(f1.__proto__.getY === Fn.prototype.getY);
console.log(f1.__proto__.getX === f2.getX);
console.log(f1.getX === Fn.prototype.getX);
console.log(f1.constructor);
console.log(Fn.prototype.__proto__.constructor);
f1.getX();
f1.__proto__.getX();
f2.getY();
Fn.prototype.getY();
2、仔细看看图片上的内容
function fun(){
this.a=0;
this.b=function(){
alert(this.a);
}
}
fun.prototype={
b:function(){
this.a=20;
alert(this.a);
},
c:function(){
this.a=30;
alert(this.a)
}
}
var my_fun=new fun();
my_fun.b();
my_fun.c();
3、Object.assign
let obj1 = {
n: 10,
m: 20,
header: {
a: 100
}
};
let obj2 = {
x: 10,
m: 30,
header: {
b: 200
}
};
/* // obj2覆盖obj1
// 只实现浅比较(浅合并):只对第一级合并
let obj = Object.assign(obj1, obj2);
console.log(obj === obj1); //true 返回的不是新对象,而是原始的obj1对象
console.log(obj === obj2); //false
/* let obj = Object.assign({}, obj1, obj2);
console.log(obj); //->返回的是第一个参数「也就是全新的一个对象」 */
4、题
function Fn() {
this.x = 100;
this.y = 200;
this.getX = function () {
console.log(this.x);
}
}
Fn.prototype = {
y: 400,
getX: function () {
console.log(this.x);
},
getY: function () {
console.log(this.y);
},
sum: function () {
console.log(this.x + this.y);
}
};
var f1 = new Fn();
var f2 = new Fn;
console.log(f1.getX === f2.getX);
console.log(f1.getY === f2.getY);
console.log(f1.__proto__.getY === Fn.prototype.getY);
console.log(f1.__proto__.getX === f2.getX);
console.log(f1.getX === Fn.prototype.getX);
console.log(f1.constructor);
console.log(Fn.prototype.__proto__.constructor);
f1.getX();
f1.__proto__.getX();
f2.getY();
Fn.prototype.getY();
f1.sum();
Fn.prototype.sum();
注意上面console.log(f1.constructor);输出的是Object函数,因为重写了Fn的原型,所以找不到constructor属性了,就会沿着原型链向上查找
5、new 执行返回的是object
function Foo() {
getName = function () {console.log(1);};
return this;
}
Foo.getName = function () {console.log(2);};
Foo.prototype.getName = function () {console.log(3);};
var getName = function () {console.log(4);};
function getName() {console.log(5);}
Foo.getName();
getName();
Foo().getName();
getName();
var a = new Foo.getName(); //
var b = new Foo().getName();
var c = new new Foo().getName();
console.log(a,b,c);
6、
function Person() {
this.name = 'zhufeng'
};
Person.prototype.getName = function () {
console.log(this.name)
console.log(this.age)
};
Person.prototype.age = 5000;
var per1 = new Person;
per1.getName();
per1.age = 9;
per1.getName();
console.log(per1.age);
var per2 = new Person;
console.log(per2.age);