1. 继承有什么作用?
对代码功能进行扩展,提高代码复用性
2. 有几种常见创建对象的方式? 举例说明?
//直接创建
var obj = {
name: "jirengu",
age: 28
}
//使用构造函数
function Jrg(name,age){
this.name = name;
this.age = age;
}
var p2 = new Jrg("jirengu",28);
//函数工厂创建
function creatObj(name,age){
var obj = {
name = name;
age = age;
sayName = function(){
console.log(this.name)
}
}
return obj;
}
var obj = creatObj("jirengu",28);
var obj2 = creatObj("fangfang",24);
//原型方式
function obj(name,age){
obj.prototype.name = name;
obj.prototype.age = age;
obj.prototype.sayName = function(){
console.log(name);
};
}
var Obj1 = new obj("jirengu",28)
3. 下面两种写法有什么区别?
//方法1
function People(name,sex){
this.name = name;
this.sex = sex;
this.printName = function(){
console.log(this.name);
}
}
var p1 = new People('饥人谷', 2)
//方法2
function Person(name, sex){
this.name = name;
this.sex = sex;
}
Person.prototype.printName =
function(){
console.log(this.name);
}
var p1 = new Person('若愚', 27);
方法1使用构造函数创建了对象p1,该对象拥有p1.name、p1.sex和p1.printName
三个属性
方法2将方法printName
绑定在对象Person的原型上,这样,通过Person新定义的对象就都拥有了printName
方法,提高了代码复用性。
4. Object.create有什么作用?兼容性如何?如何使用?
对对象进行clone.ES5的方法,不兼容IE6、IE7
使用方法:
function Person(name,sex){
this.name = name;
this.sex = sex;
}
Person.prototype.sayName = function(){
console.log(this.name);
}
function Male(name,sex,age){
Person.call(this,name,sex);
this.age = age;
}
var _proto = Object.create(Person.prototype);
Male.prototype = _proto;
_proto.constactor = Male;
var p =new Male("nz","男","28");
p.sayName();
5. hasOwnProperty有什么作用? 如何使用?
hasOwnPerperty是Object.prototype的一个方法,可以判断一个对象是否包含自定义属性而不是原型链上的属性,hasOwnProperty是JavaScript中唯一一个处理属性但是不查找原型链的函数
以问题4中的代码为例:
m.hasOwnProperty('name'); // true
m.hasOwnProperty('printName'); // false
Male.prototype.hasOwnProperty('printAge'); // true
6. 实现Object.create的 polyfill,如:(ps: 写个 函数create,实现 Object.create 的功能)什么是 polyfill?
一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了
function create(obj){
if(typeof Object.create !== "function"){
var func = function(){
func.prototype = obj.prototype;
return new func();
}
}
return Object.create(obj.prototype);
}
var obj = {
a: 1,
b:2
};
var obj2 = create(obj);
console.log(obj2.a); //1
6. 如下代码中call的作用是什么?)
function Person(name, sex){
this.name = name;
this.sex = sex;
}
function Male(name, sex, age){
Person.call(this, name, sex); //这里的 call 有什么作用 this.age = age;
}
//在this的作用域下执行Person
7. 补全代码,实现继承
function Person(name, sex){
this.name = name;
this.sex = sex;
}
Person.prototype.getName = function(){
return this.name;
};
Person.prototype.printName = function(){
console.log(this.age);
}
function Male(name, sex, age){
Person.call(this,name,sex);
this.age = age;
}
var _proto = Object.create(Person.prototype);
Male.prototype = _proto;
Male.prototype.constractor = Male;
Male.prototype.getAge = function(){
return this.age;
};
var ruoyu = new Male('若愚', '男', 27);
ruoyu.printName();
本文版权归帘外修竹及杭州饥人谷所有,转载必须说明出处