JavaScript之函数的高级(二)原型链
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript之函数的高级(二)原型链,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2733字,纯文字阅读大概需要4分钟。
内容图文
![JavaScript之函数的高级(二)原型链](/upload/InfoBanner/zyjiaocheng/813/df4602311edd472dbee4d9fa7dbe5e0b.jpg)
3、原型链
原型链的尽头:Object原型对象,即__proto__=null
3.1 什么才具有prototype?=====》
*函数对象,(函数名. 作为对象)
new Object()没有prototype属性,因为不是一个函数对象,而是一个实例对象。
Object本身有prototype属性
什么是prototype?什么时候产生?
prototype是引用变量属性,指向的是一个对象(原型对象)。
创建函数对象的时候产生prototype属性。
3.2那么什么时候创建函数对象?
定义函数的时候
***1:执行函数定义
***2、执行函数
3.3 执行函数定义的时候,函数体执行没有?
没有执行,只是创建一个函数对象。
函数名()的时候是执行函数
3.4什么是函数?
函数是一个特殊的对象,特殊的地方在于可以执行,可以执行是因为函数内部是n条代码(语句)
3.5创建函数对象的时候,内部做了什么事情?
添加一条语句(this.prototype={}),即创建了一个空的Object对象,也就是原型对象。this是创建的函数对象
1、原型链(图解)prototype
本质上是沿着隐式原型查找,
别名:隐式原型链
*
访问一个对象的属性或方法时,是怎么查找的?
**先在自身属性中查找,找到返回 **如果没有,再沿着__proto__这条链向上查找,找到返回 **如果最终没有找到,返回“undefined”
3.6原型链的作用:
查找对象的属性(方法)【课外:查找变量是作用域链】
2、构造函数、原型、实体对象关系图
var o1 = new Object();
var o2 = {};
3、构造函数、原型、实体对象的关系2图
function Foo(){ }
11、函数的显示原型指向的对象:默认是空Object实例对象【但是Object的prototype不满足,】(代码见下面)
//11
console.log(Fn.prototype instanceof Object);//true
console.log(Function.prototype instanceof Object);//true
console.log(Object.prototype instanceof Object);//false
22、所有函数都是Function的实例,包括它本身(Function)
**Object的原型对象是原型链的尽头,也就是Object.prototype.__proto__为null(代码见下面)
//22
console.log(Function.__proto__ === Function.prototype);//true
//22 **
console.log(Object.prototype.__proto__);//null
console.log(Object);/*
? Object() { [native code] }
*/
// console.log(Object.prototype);
/*
* {constructor: ?, __defineGetter__: ?, __defineSetter__: ?, hasOwnProperty: ?, __lookupGetter__: ?, …}
* constructor: ? Object()hasOwnProperty: ? hasOwnProperty()isPrototypeOf: ? isPrototypeOf()propertyIsEnumerable: ? propertyIsEnumerable()toLocaleString: ? toLocaleString()toString: ? toString()arguments: (...)caller: (...)length: 0name: "toString"__proto__: ? ()[[Scopes]]: Scopes[0]valueOf: ? valueOf()__defineGetter__: ? __defineGetter__()__defineSetter__: ? __defineSetter__()__lookupGetter__: ? __lookupGetter__()__lookupSetter__: ? __lookupSetter__()get __proto__: ? __proto__()set __proto__: ? __proto__()
* */
console.log(Object.prototype.__proto__);//null
function Fn(){
this.test1=function () {
console.log('test1()');
}
}
Fn.prototype.test2=function () {
console.log('test2()');
}
var fn= new Fn();
fn.test1();
fn.test2();
console.log(fn.toString());//[object Object]
// console.log(fn.test3);//undefined
// fn.test3();
内容总结
以上是互联网集市为您收集整理的JavaScript之函数的高级(二)原型链全部内容,希望文章能够帮你解决JavaScript之函数的高级(二)原型链所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。