js 原型规则与示例
五大规则
1. 所有的引用类型( 数组 对象 函数 ) 都是 具有对象特性即自由拓展属性 (除了 ”null“)意外
2. 所有的引用类型(数组 对象 函数 ) 都有一个 proto 属性属性值是一个普通的对象
3. 所有的函数 都有一个prototype 属性 ,属性值也是一个普通的对象
4. 所有的引用类型(数组 对象 函数),proto 属性值指向它的构造函数 ”prototype“ 属性值
5. 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性那么会去它的__proto__(即它的构造函数的prototype寻找)
示例
<script>
// 构造函数
function Foo(name , age){
this.name = name;
this.age = age;
this.class = "class-1";
return this; // 默认有这一行
}
var f = new Foo( "bobo" ,22); // 实例化对象
var a = {} 其实 是 var a = new Object();
var a = [] 其实 是 var a = new Array();
function Foo(){} 其实 是 var Foo = new Function();
使用instanceof 判断函数是否是一个变量的构造函数
如何判断一个变量是不是数组 : 用instanceof Array
// 二、原型规则和示例
// 原型规则是学习原型链的基础
1. 所有的引用类型( 数组 对象 函数 ) 都是 具有对象特性 即自由拓展属性 (除了 ”null“)意外
拓展性
var obj = {} ; a.age = 100;
var arr = [] ; b.a = 100;
function fn (){}
fn.a = 100;
2. 所有的引用类型(数组 对象 函数 ) 都有一个 proto 属性,属性值是一个普通的对象
// __proto__ 隐式类型
console.log(obj.__proto__);
console.log(arr.__proto__);
console.log(fn.__proto__);
3. 所有的函数 都有一个prototype 属性 ,属性值也是一个普通的对象
// prototype 显示类型
console.log( fn.prototype );
4. 所有的引用类型(数组 对象 函数),proto 属性值指向 它的构造函数 ”prototype“ 属性值
console.log( obj.__proto__ === Object.prototype)
5. 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性 那么会去它的__proto__(即它的构造函数的prototype寻找)
// 构造函数
function Foo(name , age ){
this.name = name ;
}
Foo.prototype.alertName = function(){
alert( this.name );
}
// 创建示例
var f = new Foo("zhangsan");
f.printName = function(){
console.log(this.name);
}
// 测试
f.printName();
f.alertName();
6. this
7. 循环对象自身的属性
var item ;
for( item in f ){
高级浏览器已经在 for in 中屏蔽了来自原型(prototype)的属性
但是这里建议大家还是加上这个判断
保证程序的健壮性
if( f.hasOwnProperty(item)){
console.log(item)
}
}
</script>
js 原型规则与示例的更多相关文章
- JS中的原型规则与原型链
1. 原型规则 A. 所有的引用类型(数组.对象.函数),都具有对象特性,即可自由扩展属性: var arr = []; arr.a = 1;B. 所有的引用类型(数组.对象.函数),都有一个_pro ...
- js原型
1.js基本类型和对象类型 js的简单类型包括数字(其中NaN为数字类型).字符串(类似'A'为字符,js没字符类型).布尔值.null值和undefined值.其他所有的值都是对象.数字.字符串和布 ...
- JS 原型链图形详解
JS原型链 这篇文章是「深入ECMA-262-3」系列的一个概览和摘要.每个部分都包含了对应章节的链接,所以你可以阅读它们以便对其有更深的理解. 对象 ECMAScript做为一个高度抽象的面向对象语 ...
- js 原型链和继承(转)
在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var ob ...
- js原型浅谈理解
之前在学习原型(prototype)的时候,一直对原型的理解不是很清晰,只是知道每个对象都有一个原型,然后在js中万物又皆对象.在这里谈一下自己对于js原型的简单理解吧. 原型可以实现属性和方法的共享 ...
- JS原型链与继承别再被问倒了
原文:详解JS原型链与继承 摘自JavaScript高级程序设计: 继承是OO语言中的一个最为人津津乐道的概念.许多OO语言都支持两种继承方式: 接口继承 和 实现继承 .接口继承只继承方法签名,而实 ...
- JS(原型和原型链)
(学习自慕课网<前端JavaScript 面试技巧> JS(原型和原型链) 题目1.如何准确判断一个变量是数组类型 使用 instanceof 方法 题目2.写一个原型链继承的例子 实例: ...
- 【学习笔记】深入理解js原型和闭包系列学习笔记——精华
深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨 不是object呢,js为何要对函数做这样的区分 ...
- 【学习笔记】深入理解js原型和闭包(12)——简介【作用域】
提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”.所谓“块”,就是大括号“{}”中间的语句.例如if语句: 再比如for语句: 所以,我们在编写代码的时 ...
随机推荐
- js 类数组arguments详解
arguments并不是一个真正的数组,而是一个"类似数组(array-like)"的对象: 就像下面的这段输出,就是典型的类数组对象: [, , callee: ƒ, Symbo ...
- Nginx 解决WebApi跨域二次请求以及Vue单页面问题
一.前言 由于项目是前后端分离,API接口与Web前端 部署在不同站点当中,因此在前文当中WebApi Ajax 跨域请求解决方法(CORS实现)使用跨域处理方式处理而不用Jsonp的方式. 但是在一 ...
- Android WebView默认GONE出现的问题记录
前段时间重构一批相似度80%以上的项目[真搞不懂前人们是怎么忍受十几个类似的应用一直CVU的,冗余代码和资源达到40%以上] 其中需要抽出一个公共的带WebView的Activity基类,由于脑残测试 ...
- Hadoop源码篇---解读Mapprer源码outPut输出
一.前述 上次讲完MapReduce的输入后,这次开始讲MapReduce的输出.注意MapReduce的原语很重要: "相同"的key为一组,调用一次reduce方法,方法内迭代 ...
- virtuoso数据库的安装方法
数据库virtuoso有两种安装配置方式 第一种就是直接在系统中默认安装,拷贝virtuoso的安装文件,直接默认安装. 第二种是配置安装方式 参考地址:http://vos.openlinksw.c ...
- Spring框架入门之开发环境搭建(MyEclipse2017平台)
基于MyEclipse2017平台搭建Spring开发环境,这里MyEclipse已将Spring集成好了,我们只需要做一简单配置即可 一.环境配置 OS:Windows7 64位 IDE工具:MyE ...
- HTML知识点总结之img、scirpt、link标签
<img>元素 使用<img>可以在网页插入一个图片,但实际上<img>标签并不会在网页中直接插入图像,而是从网页上链接图像. <img>的主要属性 ( ...
- 一键下载你的youtube视频
很多人喜欢逛油管看视频,自然就会有一些喜欢的收藏集或者视频作者,有时候想要下载下来保存在本地播放,这样的话就不用每次FQ,毕竟有些代理的速度并不是很理想(如果你的代理速度炒鸡快的话,请忽略这篇文章). ...
- myeclipse 扩展内存大小
工具中修改设置Default VM ArgumentsWindows-> Preferences->Java->Installed JREs,点击右侧的jdk,然后点击"E ...
- 为什么arguments是类数组对象
为什么JavaScript里函数的arguments只是array-like object? 只是标准这么规定的,还是有什么设计原因在里面?JavaScript的函数里面的arguments对象有 . ...