prototype属性的理解
1.对象:对象是JS的基本数据类型(原始类型(数字、字符串和布尔值),对象类型)。对象是一种复合值:它将很多值(原始值或者其他对象)聚合在一起,可通过名字访问这些值。
2.三类JS对象和两类属性:
内置对象:是由ECMAScript规范定义的对象或类。例如,数组(Array)、函数(Function)、日期(Date)和正则表达式(RegExp)都是内置对象
宿主对象:由JS解释器所嵌入的宿主环境定义的。客户端JS中表示网页结构的HTMLElement对象均是宿主对象,既然宿主环境定义的方法可以当成普通的JS函数对象,那么宿主对象也可以当成内置对象。
自定义对象:由运行中的JS代码创建的对象。
自有属性:直接在对象中定义的属性。
继承属性:在对象的原型对象中定义的属性。
3.对象三个特征
对象的原型:指向另外一个对象,本对象的属性继承自它的原型对象。
对象的类:是一个标识对象类型的字符串。
对象的扩展标记:指明了是否可以向该对象添加新属性
4.对象的原型:
概念:每一个JS对象(null除外)都和另一个对象相关联。"另一个"对象就是我们熟知的原型,每一个对象都从 原型对象 继承属性。
理解几句话:
1).所有通过 对象直接量 创建的对象都具有同一个原型对象,并可以通过JS代码Object.prototype获得对原型对象的引用。
对象直接量:是由若干名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用花括号括起来。
对象直接量例子:
var empty = {}; //没有任何属性的对象
var point = {x:0,y:0}; //两个属性
var point2 = {x:point.x,y:point.y}; //更复杂的值
var book = {
"main title" : "JavaScript", //属性名字里有空格,必须用字符串表示
"sub-title" : "the definitive guide", //属性名字里有连字符,必须用字符串表示
"for" : "all audiences", //"for"是保留字,因此必须用引号
autor : { //这个属性的值是一个对象
firstname : "David", //注意,这里的属性名都没有引号
surname : "Flanagan"
}
};
2).通过关键字new和构造函数调用创建的 对象 的 原型 就是 构造函数的prototype属性 的值。
prototype只是函数有,自定义函数、JS内部构造函数(Array, Function, String ....)本质上都是有prototype
使用{}创建对象一样,通过new Object()创建的对象也继承自Object.prototype.
通过new Array()创建的 实例对象 的 原型 就是Array.prototype, (Array,Date等都是JS内部构造函数)。
var a = new Array();
分析:这里a是一个Array类实例对象,Array是JS内部构造函数,new和构造函数调用创建一个新的实例对象,(注意,new运算符创建并初始化一个新对象。关键字new后跟随一个函数调用。这里的函数称做构造函数(constructor))。
通过new Date()创建的 实例对象 的 原型 就是Date.prototype.
var b = new Date();
分析:这里b是一个Date类实例对象,Date是JS内部构造函数,
console.log(b.prototype); //undefined
console.log(Date.prototype); //Date{}
console.log(b.constructor); //Date()
5.对象的类:
如果定义一个原型对象,然后通过inherit()函数创建一个继承自它的对象,这样就定义了一个JS类。
function Person(name, gender) {
this.name = name;
this.gender = gender;
Person.prototype.hello = function(){
alert("hello, my name is" + this.name);
};
var man = new Person("张三", "男")
man是构造函数Person的一个实例(即类Person的实例),是对象型即object的类实例,自动具备 构造函数原型(Person.prototype) 上的定义的方法(hello)。
             当修改或增加构造函数prototype上的属性或方法时,它的所有实例也会同步更新。实例具备类原型上的所有方法和属性。
prototype属性的理解的更多相关文章
- 关于prototype属性的理解
		
众所周知,prototype是一个属性对象,只要创建一个新函数,就会根据特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象.在默认情况下,所有原型对象都会自动获得一个cons ...
 - 简单理解js的prototype属性
		
在进入正文之前,我得先说说我认识js的prototype这个东西的曲折过程. 百度js的prototype的文章,先看看,W3School关于prototype的介绍: 你觉得这概念适合定义js的pr ...
 - 理解 JavaScript 对象原型、原型链如何工作、如何向 prototype 属性添加新的方法。
		
JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象也可能拥有原型, ...
 - prototype 以及 constructor 属性的理解
		
1 为什么 xx.constructor.prototype 可以访问到当前对象的原型. 'str'.constructor.prototype 'str'.constructor 指向当前 ...
 - Javascript中prototype属性详解
		
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
 - js中Prototype属性解释及常用方法
		
1.prototype的定义 javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用. 每一个构造函数都有一个属 ...
 - Javascript中prototype属性的详解
		
原文链接:http://www.cnblogs.com/Uncle-Keith/p/5834289.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象 ...
 - javascript中的this与prototype,原型理解
		
JavaScript 函数调用 JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. this 关键字 一般而言,在Javascript中,this指向函数执行 ...
 - JS学习之prototype属性
		
javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用.以A.prototype = new B();为例, 理 ...
 
随机推荐
- Netty 5.0源码分析-Bootstrap
			
1. 前言 io.netty.bootstrap类包提供包含丰富API的帮助类,能够非常方便的实现典型的服务器端和客户端通道初始化功能. 包含的接口类: //提供工厂类的newChannel方法创建一 ...
 - nordic  DFU固件升级
			
一:测试固件芯片类型: nordic 52832 二:下载升级源码 1>nRF Toolbox App 源码 https://github.com/NordicSemiconductor/IO ...
 - TypeScript 学习三 类
			
1,类: 类是TypeScript的核心,大部分代码都是写在类里面: 声明:class 类名{ 属性: 方法(){}:} 注意:类名首字母同样大写,但是方法不需要表明类型,直接写方法名加()即可:属 ...
 - Oracle与Sqlserver:Order by NULL值介绍
			
针对页面传参到in的子集中去进行查询操作的话,就会有in(xxx,null),这样就会导致查询的结果中其实直接过滤掉了null,根本就查不出来null的值.之前对于null的操作都是进行不同数据库的n ...
 - mysql 查看数据库中所有表的记录数
			
use information_schema; SELECT DISTINCT t.table_name, t.engine '表引擎', t.table_rowsFROM TABLES tWHERE ...
 - NGINX----源码阅读---have配置脚本
			
/auto/have have配置脚本负责在$NGX_OBJS/ngx_auto_config.h定义宏 # Copyright (C) Igor Sysoev # Copyright (C) Ngi ...
 - 著名清理软件(CCleaner) 5.24.5841 中文版
			
软件名称: 著名清理软件(CCleaner) 软件语言: 多国语言 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 5.7MB 图片预览: 软件简介: CCleaner的体积小, ...
 - zabbix 布署实践【2 agent安装】
			
客户端的安装相对较为简单,主要是更新它的repo源 以CentOS7为例 rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabb ...
 - JqGrid的总结大全【转】
			
jqGrid整理 PS:JqGrid 官方 API 点我 我的笔记: 一. jqGrid的加载. 1.引用相关头文件 引入CSS: <link href="Scripts/jq ...
 - Python学习笔记——基础篇【第五周】——os模块和sys模块
			
OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录 ...