原生JS以对象作为构造器创建实例Object.create()
程序员文章站
2022-05-23 23:14:37
...
使用对象字面量作为其他对象的基础
创建Person对象 具有下列属性
var Person = {
firstName : 'quanquan',
lastName : 'xu',
birthDate : new Date('1992-01-04'),
gender : 'female',
getAge : function(){
var today = new Date();
var diff = today.getTime() - this.birthDate.getTime();
console.log( diff )
var year = 1000*60*60*24*365.25;
return Math.floor(diff/year);
},
toString : function(){
return this.firstName + ' ' + this.lastName + ' is a ' + this.getAge() + ' year-old ' + this.gender;
}
}
创建Person的类型的实例
ES6 Object.create 提供对象间联系的方法
修改原型中的一些属性 未修改的则继承Person
var yuan = Object.create( Person );
console.log( yuan.__proto__ );//查看yuan的原型Person
console.log( yuan.__proto__ === Person);//true
yuan.firstName = 'yuanyuan';//修改firstName
yuan.lastName = 'hu';//修改lastName
yuan.birthDate = new Date('1990-10-25');//修改birthDate
console.log( yuan.toString() );//yuanyuan hu is a 27 year-old female
当ES6 不支持Object.create时可以使用一下方法创建实例
构造函数的方式
if( typeof Object.create != 'function' ){
Object.create = function( o ){
function F(){}
F.prototype = o;
return new F();
}
}
当你不喜欢使用Object.create时 可以使用工厂方法
var Animal = {
type : 'pig',
age : '3',
gender : 'female',
showInfo : function(){
return this.type + ' ' + this.age + this.gender;
},
extend : function(config){
var tmp = Object.create( this );
for( var key in config ){
if( config.hasOwnProperty( key ) ){
tmp[ key ] = config[ key ];
}
}
return tmp;
}
}
//dog继承Animal
var Dog = Animal.extend({
type : 'dog',
age : '4',
showInfo : function(){
return 'this dog' + this.type + this.age;
}
});
//cat继承Dog 但拥有Animal的属性
//如果Dog的属性与Animal的属性冲突 那么继承的是Dog的属性
var cat = Dog.extend({
type : 'cat',
age : '5'
});
console.log(Dog.showInfo());//this dogdog4
console.log(cat.__proto__);//Dog
console.log(Dog.__proto__);//Animal
console.log( cat.showInfo() );//this dogcat5
判断Dog的原型是否是Animal isPrototypeOf
console.log( Animal.isPrototypeOf( Dog ) );//true
console.log( Dog.isPrototypeOf( Animal ) );//false
返回当前对象的原型 getPrototypeOf
console.log( Object.getPrototypeOf(cat) );//Animal
参考书籍:《精通javascript》(第二版) 第三章