function protoTest() {//原型链验证
/*
函数与对象的关系:函数是对象,对象都是由函数创建的
原型的类别:显式原型prototype是函数独有的,隐式原型__proto__是所有对象都有的
原型:一个函数可以看成一个类,原型是所有类都有的一个属性
原型链:每一个对象的__proto__指向构造这个对象的函数的prototype
Function是顶层构造器,创建了所有对象,包括他自己
Object是顶层对象,所有对象都继承Object的原型,Object也是被Function构造出来的
*/
//定义一个类
function User(name, age, skill, msg) {
this.name = name;
this.age = age;
this.skill = skill
this.speak = function () {
console.log(msg)
}
}
//定义一个对象
var nahida = new User('Nahida', 500, {e: '手牵手', q: '此即,智慧之殿堂'}, '小心头顶上长出蘑菇哦')
console.log('对象的原型指向构造函数的prototype', nahida.__proto__ === User.prototype)//true,规定的
console.log('对象方法的隐式原型指向Function的prototype', nahida.speak.__proto__ === Function.prototype)//true,对象的方法也是函数,是由Function创建的
console.log('对象属性的原型指向属性类型的构造函数的prototype', nahida.name.__proto__ === String.prototype)//true,对象的属性也是由相应的构造函数创建的
console.log('对象属性的原型指向属性类型的构造函数的prototype', nahida.age.__proto__ === Number.prototype)//true,对象的属性也是由相应的构造函数创建的
console.log('对象属性的原型指向属性类型的构造函数的prototype', nahida.skill.__proto__ === Object.prototype)//true,对象的属性也是由相应的构造函数创建的
console.log('')
console.log('函数的隐式原型指向Function的prototype', User.__proto__ === Function.prototype)//true,函数是对象,是由Function创建的
console.log('函数的显式原型是独立的对象', User.prototype === Function.prototype)//false,就是个普通对象
console.log('函数的显式原型的原型指向Object的prototype', User.prototype.__proto__ === Object.prototype)//true,是个普通对象,构造函数是Object
console.log('')
console.log('Function的隐式原型指向Function的prototype', Function.__proto__ === Function.prototype)//true,Function是由Function创建的
console.log('Function的显式原型的隐式原型指向Object的prototype', Function.prototype.__proto__ === Object.prototype)//true,是个普通对象
console.log('')
console.log('Object的隐式原型指向Function的prototype', Object.__proto__ === Function.prototype)//true,Object也是由Function创建的
console.log('Object的显式原型的隐式原型为null', Object.prototype.__proto__ === null)//true,特殊要求
}
JavaScript原型的理解
最新推荐文章于 2024-04-19 09:05:17 发布