第198天:js---内置对象的原型链和其他知识
一、内置对象的原型链
1、Object原型
function test() {}
alert(test.toString()); //新增属性
Object.prototype.mytest = function() {
alert("123");
}
var o = new Object();
o.mytest(); //重写属性
Object.prototype.toString = function()
{
alert("破坏之王");
}
o.toString();
2、Object对象是Function对象的实例
/*object的__proto__指向Function对象的原型*/
//Object对象是Function对象的一个实例
console.log(Object.__proto__ === Function.prototype);//true /*Function.prototype对象的原型的__proto__属性指向Object.prototype*/
console.log(Function.prototype.__proto__ === Object.prototype) /*object的原型的__proto__属性为null*/
console.log(Object.prototype.__proto__ ) /*总结*/
/*一个自定义对象可以访问到Function对象的所有属性和方法,也可以访问到Object对象的所有属性和方法*/
3、内置对象的实例指向
//Object对象是Function对象的一个实例
//Object对象的__proto__指向Function的原型
console.log(Object.__proto__===Function.prototype);//true console.log(Object.prototype.__proto__);//null console.log(Function.prototype.__proto__===Object);//false
console.log(Function.prototype.__proto__===Object.prototype);//true //内置对象的_proto_的指向
console.log(Number.__proto__ ===Function.prototype);//true
console.log(Boolean.__proto__ ===Function.prototype);//true
console.log(String.__proto__ ===Function.prototype);//true
console.log(Object.__proto__ ===Function.prototype);//true
console.log(Function.__proto__ ===Function.prototype);//true
console.log(RegExp.__proto__ ===Function.prototype);//true
console.log(Error.__proto__ ===Function.prototype);//true
console.log(Date.__proto__ ===Function.prototype);//true //自定义对象的原型的__proto__指向
function Product(){}; Product.prototype={}; var iphone=new Product();
console.log(Product.prototype.__proto__);//object
console.log(Product.prototype.__proto__===Object.prototype);//true //构造函数就是一个函数,函数都是由Function实现的,都是它的一个实例
console.log(Product.__proto__===Function.prototype);//true var obj = new Object();
//toString是object的方法,因为在原型中,所以所有对象都可以访问
//Object.prototype.toString=function(){};
console.log(obj.toString());//[object Object] /*object的实例指向Object的原型对象*/
console.log(obj.__proto__ === Object.prototype);//true
4、自定义对象的原型链
//object的__proto__指向的是Function.prototype
console.log(Object.__proto__ ===Function.prototype) /*null*/
console.log(Object.prototype.__proto__); /*object*/
console.log(Function.prototype.__proto__ === Object) //false
console.log(Function.prototype.__proto__ === Object.prototype) //ture /*内置对象的__proto__指向*/
console.log(Number.__proto__ === Function.prototype) // true
/*
Boolean.__proto__ === Function.prototype // true
String.__proto__ === Function.prototype // true
Object.__proto__ === Function.prototype // true
Function.__proto__ === Function.prototype //true
Array.__proto__ === Function.prototype // true
RegExp.__proto__ === Function.prototype // true
Error.__proto__ === Function.prototype // true
Date.__proto__ === Function.prototype // true*/ /*自定义对象的原型的__proto__指向*/
function Product(){} Product.prototype={} var iphone = new Product() console.log(Product.prototype.__proto__)
console.log(Product.prototype.__proto__ === Object) //false
console.log(Product.prototype.__proto__ === Object.prototype) //true var obj = new Object() /* Object.prototype.toString=function(){
alert('破坏之王')
}*/ console.log(obj.toString())
/*构造函数其实就是一个函数
函数都是Function实现的。都是它的一个实例*/ /* Function
Function.prototype
Object
Object.prototype*/ console.log(Product.__proto__ ===Function.prototype); console.log(Array.prototype.__proto__ === Object.prototype );
二、其他知识
1、hasOwnproperty
var person= function(){
age=1
}; person.prototype={
name:'wangshukui'
}; var xiaowang = new person();
//实例化之后 重新分配内存 系统会自动屏蔽原型同名 -- 原理 开辟新的空间 //
alert(xiaowang.hasOwnProperty("name"));//false --表明是原型属性 alert(xiaowang.hasOwnProperty("age")); //false --类属性 //当定义一个实例化属性之后,会自动屏蔽原型属性
xiaowang.name='小李';
alert(xiaowang.hasOwnProperty('name')) //true xiaowang.sex='nan';
alert(xiaowang.hasOwnProperty('sex')) //true
2、isPrototypeOf
判断iphone是否拥有Product的原型属性
function Product(){
this.name='iphone8';
this.description='手机中的战斗机';
this.price=7777;
this.date=new Date();
this.add = function(){};
} Product.prototype={
test:11111,
buy:function(){}
}
var iphone = new Product()
console.log(Product.prototype.isPrototypeOf(iphone));//true
3、constructor 查看对象的构造函数
//constructor : 查看对象的构造函数 /*function Aaa(){
} var a1 = new Aaa(); alert( a1.constructor ); //Aaa var arr = [];
alert( arr.constructor == Array ); //true*/ /*function Aaa(){
}
//Aaa.prototype.constructor = Aaa; //每一个函数都会有的,都是自动生成的 //Aaa.prototype.constructor = Array; var a1 = new Aaa();
alert( a1.hasOwnProperty == Object.prototype.hasOwnProperty ); //true*/ /*function Aaa(){
} Aaa.prototype.name = '小明';
Aaa.prototype.age = 20; Aaa.prototype = {
constructor : Aaa,
name : '小明',
age : 20
}; var a1 = new Aaa();
alert( a1.constructor );*/ function Aaa(){
} Aaa.prototype.name = 10;
Aaa.prototype.constructor = Aaa; for( var attr in Aaa.prototype ){
alert(attr);
}
4、instanceof : 对象与构造函数在原型链上是否有关系
//instanceof : 对象与构造函数在原型链上是否有关系 function Aaa(){
} var a1 = new Aaa(); //alert( a1 instanceof Object ); //true var arr = []; alert( arr instanceof Array );//true
5、静态属性、原型属性和实例属性
//对象构造函数
function Atest(name){
//私有属性,只能在对象构造函数内部使用
var className = "Atest";
//公有属性,在对象实例化后调用
this.name = name;
//对象方法
this.hello = function(){
alert(this.name);
alert(this.msg());//使用原型方法扩充的方法可以在类内部使用
alert(this.sex);//使用原型方法扩充的属性可以在类内部使用
alert(Atest.age);//静态属性调用时格式为[对象.静态属性]
}
}
//类方法 (实际是静态方法直接调用) 位置:Person类的外部 语法格式:类名称.方法名称 = function([参数...]){ 语句行; }
Atest.Run = function(){
alert("我是类方法 Run");
} //原型方法
Atest.prototype.msg = function(){
alert("我的名字是:"+this.name);//如果原型方法当作静态方法直接调用时,this.name无法被调用
} //公有静态属性 在类的外部
Atest.age = 20;//公有静态属性不能使用 【this.属性】,只能使用 【对象.属性】 调用 //原型属性,当作是类内部的属性使用【this.原型属性】,也可以当成公有静态属性使用【对象.prototype.原型属性】
Atest.prototype.sex = "男"; Atest.Run(); //类方法也是静态方法,可以直接使用 【对象.静态方法()】
Atest.prototype.msg();//原型方法当成静态方法使用时【对象.prototype.方法()】
alert(Atest.prototype.sex);//原型属性当作静态属性使用时【对象.prototype.方法()】
var a = new Atest("zhangsan");//对象方法和原型方法需要实例化对象后才可以使用
a.hello();//对象方法必须实例化对象
a.msg();//原型方法必须实例化对象
alert(a.age)://错误,公有静态属性只能使用 【对象.属性】调用 //ps:尽量将方法定义为原型方法,原型方法避免了每次调用构造函数时对属性或方法的构造,节省空间,创建对象快.
第198天:js---内置对象的原型链和其他知识的更多相关文章
- JS内置对象的原型不能重定义?只能动态添加属性或方法?
昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑.情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖, 只能动态的为内置对象的原型添加属性或 ...
- JS高级. 03 混入式继承/原型继承/经典继承、拓展内置对象、原型链、创建函数的方式、arguments、eval、静态成员、实例成员、instanceof/是否在同一个原型链
继承:当前对象没有的属性和方法,别人有,拿来给自己用,就是继承 1 混入式继承 var I={ }; var obj = { name: 'jack', age:18, sayGoodbye : fu ...
- 4月5日--课堂笔记--JS内置对象
JavaScript 4.5 一. JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i. 没有参数:创建一个初始容量为0的数组 ii. ...
- JS内置对象有哪些?
JS内置对象分为数据封装类对象和其他对象 数据封装类对象:String,Boolean,Number,Array,和Object; 其他对象:Function,Arguments,Math,Date, ...
- JS内置对象-String对象、Date日期对象、Array数组对象、Math对象
一.JavaScript中的所有事物都是对象:字符串.数组.数值.函数... 1.每个对象带有属性和方法 JavaScript允许自定义对象 2.自定义对象 a.定义并创建对象实例 b.使用函数来定义 ...
- 5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、
location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID ...
- js课程 3-9 js内置对象定时器和超时器怎么使用
js课程 3-9 js内置对象定时器和超时器怎么使用 一.总结 一句话总结:定时器: 1.定义 sobj=setInterval(func,1000); 2.清除 cl ...
- js课程 2-8 js内置对象有哪些
js课程 2-8 js内置对象有哪些 一.总结 一句话总结:JS中内置了17个对象,常用的是Array对象.Date对象.正则表达式对象.string对象.Global对象. 1.js常用对象有哪些? ...
- JS 内置对象 String对象
JS内置对象 String对象:字符串对象,提供了对字符串进行操作的属性和方法. Array对象:数组对象,提供了数组操作方面的属性和方法. Date对象:日期时间对象,可以获取系统的日期 ...
随机推荐
- 20155204 《Java程序设计》实验一(Java开发环境的熟悉)实验报告
实验一 Java开发环境的熟悉 一.实验内容及步骤 1.使用JDK编译.运行简单的java程序 步骤一:在linux界面下运行终端 步骤二:在终端中打开待编译文件的文件夹 步骤三:使用 javac 文 ...
- 20155333 2016-2017-2 《Java程序设计》第十周学习总结
20155333 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络概览 两台计算机用于通信的语言叫做"协议".我们只需关心应用层中的协 ...
- 【LG4185】[USACO18JAN]MooTube
[LG4185][USACO18JAN]MooTube 题面 洛谷 题解 先将所有操作和询问离线 然后按照边权从大到小将操作和询问排序 利用\(two\;pointers\),每次扫到一个询问,将边权 ...
- Java or Python?测试开发工程师如何选择合适的编程语言?
很多测试开发工程师尤其是刚入行的同学对编程语言和技术栈选择问题特别关注,毕竟掌握一门编程语言要花不少时间成本,也直接关系到未来的面试和就业(不同企业/项目对技术栈要求也不一样),根据自身情况做一个相对 ...
- NO.04--我的使用心得之使用vue绑定class名
今天聊一聊这个话题,其实方式有很多种,我今天介绍几种我使用到的,各位看官耐心看: 一.用 变量形式 绑定单个 Class 名 在 vue 中绑定单个 class 名还好说,直接写就可以了 <te ...
- Linux内核学习笔记(2)-- 父进程和子进程及它们的访问方法
Linux系统中,进程之间有一个明显的继承关系,所有进程都是 PID 为1的 init 进程的后代.内核在系统启动的最后阶段启动 init 进程.该进程读取系统的初始化脚本(initscript)并执 ...
- New Year_2019
新年目标 1. own的项目稳定高效,业务能满足业务方需求,功能质量超出业务方期待.2. 工作中成长,包括项目的需求管理,计划排期,整体的把控能力.3. 对公司的业务了解程度达到更高程度. 个人技能目 ...
- 回归Qt——写在Qt5.10发布之日
今天偶然看到一条关于Qt5.10发布的消息,发现Qt经历了诺基亚风波之后发展得依然良好,感到很欣慰.回头看上次关注Qt技术还是2011年,那时候用Qt4.7做一个小项目,对于一个写Win32界面和MF ...
- Is It A Tree?(并查集)
Description A tree is a well-known data structure that is either empty (null, void, nothing) or is a ...
- USACO 1.4.2 Mother's Mil 母亲的牛奶(DFS)
Description 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数,最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装 ...