js prototype 理解
简单理解:prototype对象是实现面向对象的一个重要机制。每个函数也是一个对象,它们对应的类就是
function,每个函数对象都具有一个子对象prototype。Prototype 表示了该函数的原型,
prototype表示了一个类的属性的集合。当通过new来生成一个类的对象时,prototype对象的属
性就会成为实例化对象的属性。 (类似反射出来的一样)
ps.(在JS 里面 全都是对象, 类Function是function的顶级超类,function实例化了叫对象,在function未实例定义的时候,其实这个定义也是属于Function)
<script>/** 关于prototype,理解这个很有必要* 可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。* JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String* 以后这样分,没有实例化的类称为类型,实例化的类称为对象实例简称实例*/Object.prototype.name = "zhangsan";Object.prototype.nihao = function(){alert("i can method name is "+this.name);}var obj = new Object();obj.nihao();alert(obj.name);//在实例上不能使用prototype,否则会发生编译错误obj.prototype.sex = "男";//error,无法给一个实例prototypevar o = {name:"zhangsan"}o.prototype.age = 30;//error,无法给一个实例prototype//可以为类型定义“静态”的属性和方法,直接在类型上调用即可alert(Object.name);Object.nihao();//实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。Object.class = "三年二班";//类静态属性var ob = new Object();alert(ob.class); //error 实例不能调用类型的静态属性和方法//可以在外部使用prototype为自定义的类型添加属性和方法。function Mytest(){this.name = "zhangsan";this.age = 20;}Mytest.prototype.hello = function(){alert(this.name);}var m = new Mytest();m.hello();//在外部不能通过prototype改变自定义类型的属性或方法。//该例子可以看到:调用的属性和方法仍是最初定义的结果。Mytest.prototype.name = "lisi";var mm = new Mytest();alert(mm.name);//可以在对象实例上改变或增加属性。(这个是肯定的)//也可以在对象上改变或增加方法。(和普遍的面向对象的概念不同)mm.name2 = "lisi";mm.hello = function(){alert(this.name2);}//mm.hello();//继承,这个例子说明了一个类型如何从另一个类型继承。function Mytest2(){}Mytest2.prototype = new Mytest;var m2 = new Mytest2();alert(m2.name);//这个例子说明了子类如何重写父类的属性或方法。Mytest2.prototype.name = "wangwu";Mytest2.prototype.hello = function(){alert('i can mytest2 extend Mytest save method hello');}var m3 = new Mytest2();m3.hello();//子类中的name属性值不会被父类覆盖function Mytest3(){this.name = "子类中的name属性值不会被父类覆盖";this.age = 20;}Mytest3.prototype = new Mytest();var m4 = new Mytest3();alert(m4.name);</script>
js prototype 理解的更多相关文章
- js面向对象理解
js面向对象理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是, ...
- JS之理解继承
JS之理解继承:https://segmentfault.com/a/1190000010468293 1.call继承,也叫借用构造函数.伪造对象或是经典继承.call继承回把父类的私有属性和方法继 ...
- vue自定义指令(Directive中的clickoutside.js)的理解
阅读目录 vue自定义指令clickoutside.js的理解 回到顶部 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: vue自定义指令 一般在需要 DOM 操 ...
- 深入理解js——prototype原型
之前(深入理解js--一切皆是对象)中说道,函数也是一种对象.它也是属性的集合,你也可以对函数进行自定义属性.而JavaScript默认的给了函数一个属性--prototype(原型).每个函数都有一 ...
- js的prototype理解
转载:https://www.cnblogs.com/douyage/p/8630529.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实 ...
- 对JS prototype的理解
1.什么是prototype? function F() {} f1 = new F();f2 = new F(); 以上的代码,F()是一个构造函数,f1和f2是由这个构造函数产生的对象. prot ...
- js笔记——理解js中的call及apply
call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...
- js prototype
1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javasc ...
- js深入理解"闭包"
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...
随机推荐
- [Todo] Redis相关学习
Redis与新浪 http://www.cnblogs.com/me115/p/3482783.html Redis对于多个CPU的机器,可以启动多实例. 可以看看这个(写的简单了) http://w ...
- 手势 触摸【缩放】GestureDetector MotionEvent 案例
GestureDetector和ScaleGestureDetector示例 /** * 演示[单点触摸手势识别器] * 演示[缩放手势识别器]最简单的使用 * @author 白乾涛 */ ...
- IE系列不支持圆角等CSS3属性的解决方案
IE系列浏览器不支持CSS的圆角(border-radius)等CSS3属性是一个众所周知的问题,而FF.Chrome原生的浏览器支持是的优雅的圆角感觉较好,如何解决这个问题呢? 一种比较传统的方案是 ...
- PHP实现链表
看了很久数据结构但是没有怎么用过,在网上看到了关于PHP的数据结构,学习了一下,与大家一起分享一下. 简短不割 ...
- 【问题】VH
[问题]: CSS中使用了VH,在iOS中展示正常,但是在安卓的个别浏览器中,当输入框弹出时,使用VH的DIV的高度会发生变化. [原因]: 在安卓端浏览器虚拟键盘弹出时,导致视口高度改变,以至于 ...
- es6中的import,export浏览器已经支持
直接上代码, 成功测验了es6的新特性 import , export语法. 服务器返回 js文件时,要加上content-type: applicaiton/javascript 这个字段. ind ...
- 语音信号处理之(一)动态时间规整(DTW)
语音信号处理之(一)动态时间规整(DTW) zouxy09@qq.com 原文:http://blog.csdn.net/zouxy09 这学期有<语音信号处理>这门课,快考试了,所以也要 ...
- javascript - = 、==、===、!=、!==、&&、||、!
= .==.===.!=.!==.&&.||.! /* * = .==.===.!=.!==.&&.||.! */ var a = 1; var b = 1; var ...
- 请MVC5 WebApi2 支持OData协议查询
一.配置项 1.WebApiConfig.cs添加如下代码: // api 支持 cors允许Ajax发起跨域的请求(nuget 中搜索 ASP.NET Cross-Origin Support,然后 ...
- Android SDK镜像的介绍使用【转发】
由于一些原因,Google相关很多服务都无法访问,所以在很多时候我们SDK也无法升级,当然通过技术手段肯定可以解决,但是比较麻烦,而且下载速度也不怎么样. 这里笔者介绍一个国内的Android镜像站, ...