1.实例的constructor属性指向什么?
function Person() {
this.name = '天下';
}
var person = new Person();
console.log(person); //指向person实例
console.log('person123---',person.constructor); //指向的是构造函数Person
为何呢?打印出的结果如下:
function Person5() {
}
var person5 = new Person5();
实例为何有一个constructor属性呢?
console.log('person5.constructor',person5.constructor); //构造函数Person5
实例的proto指针指向什么呢?
console.log('person5.__proto__',person5.__proto__); // 原型:{ constructor: f }
构造函数的prototype指向什么呢?
console.log('Person5.prototype',Person5.prototype); // 原型:{ constructor: f }
判断实例的proto指针和构造函数的原型是否相等
console.log('是否相等',person5.__proto__ === Person5.prototype); //true
person5.proto.constructor 和 person5.constructor
console.log('两者是否相等',person5.__proto__.constructor === person5.constructor ); //true
2.只要用instanceof操作符来测试实例与原型链中出现过的构造函数,结果就会返回true。这句话如何理解?
实例和构造函数的关系
3.使用isPrototypeOf()方法,只要是原型链中出现的原型,都可以说是该原型链所派生实例的原型。
原型和实例之间的关系
4.借用构造函数的继承如何理解?
function Person15() {
this.colors = ['q','w','e','r'];
}
function Son15() {
Person15.call(this);
//为何返回的是undefined,因为Person15函数,并没有return
//console.log('Person15.call(this)',Person15.call(this)); //undefined
//执行之后的结果打印如下:
console.log('this.colors---',this.colors);
}
var son15 = new Son15();
son15.colors.push('123');
console.log('son15.colors',son15.colors);
var son151 = new Son15();
console.log('son151.colors',son151.colors);
5.原型式继承的优点和缺点是什么呢?
6.值类型和引用类型的区别?
7.new 一个实例,发生了哪些步骤呢?
function Person() {
this.name = '天下';
}
var person = new Person();
- new一个新的对象(相当于var obj = new Object(),new Object就相当于分配一块内存)
- 将构造函数中的作用域指向新的对象。(构造函数中的作用域原本指向window,如今指向obj)
- 执行构造函数中的代码(为这个新的对象添加属性)this指向obj。this.name = 123;就是obj.name = 123;
- 返回新的对象。