prototype
每个函数都有一个属性叫做prototype
这个prototype的属性值是一个对象(属性的集合,再次强调!),默认的只有一个叫做constructor的属性,指向这个函数本身
function C(){}
let o = new C()
console.log(typeof C)//function
console.log(typeof C.prototype)//object
console.log(typeof C.prototype.constructor)//Function
console.log(typeof o)//object
console.log(o.constructor)//[Function: C]
console.log(typeof o.constructor)//function
function Fn() { }
Fn.prototype.name = '王福朋';
Fn.prototype.getYear = function () {
return 1988;
};
console.log(Fn.prototype)//{ name: '王福朋', getYear: [Function (anonymous)] }
function Fn() { }
Fn.prototype.name = '王福朋';
Fn.prototype.getYear = function () {
return 1988;
};
var fn = new Fn();
console.log(fn.name);//王福朋
console.log(fn.getYear());//1988
let op = new Fn()
console.log(op.name)//王福朋
console.log(op.getYear());//1988
Fn是一个函数,fn对象是从Fn函数new出来的,这样fn对象就可以调用Fn.prototype中的属性。
每个对象都有一个隐藏的属性——“proto”,这个属性引用了创建这个对象的函数的prototype。即:fn.__proto__ === Fn.prototype
在看完《函数和对象的关系》,理解所有对象都是由函数创建的后,进一步深化理解了prototype和constructor的关系
console.log(typeof Object.prototype);//object
console.log(typeof Object.prototype.constructor);//function
let obj = new Object()
console.log(obj.constructor);//[Function: Object]
function fn(){}
let a = new fn()
console.log(fn.prototype);//{}
console.log(a.constructor);//[Function: fn]
fn.prototype = Object
console.log(typeof fn.prototype);//function
console.log(a.constructor);//[Function: fn]
console.log(a.constructor.prototype);//[Function: Object]
console.log(a.constructor.prototype.constructor);//[Function: Function]
最好的JS深入教学:深入理解javascript原型和闭包(完结)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义