- 浏览: 123053 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
煎蛋就是幸福:
...
试读《跨终端Web》 -
xiaoshitoushifa:
最好把demo贴上啊!发一份到435065893@qq.com ...
漂亮的系统后台UI 欣赏 -
xiaoshitoushifa:
只有图片 没有demo 啊
漂亮的系统后台UI 欣赏
javascript 灵活度太大了,比如定义一个类,就可以使用多种方式,也就是没有一个固定的语法来约束,这也是学习的难点,内部的prototype、__proto__、Function、Object 更是不容易理解。
精力的浩瀚、想象的活泼、心灵的勤奋:就是天才。说到prototype,就不得不先说下new的过程。
不是每一个都要站在第一线上的,大家应当做本身份内的工作。我们先看看如许一段代码:
var Person = function () { };
var p = new Person();
</script>
很简单的一段代码,我们来看看这个new毕竟做了什么?我们可以把new的过程拆分成以下三步:
<1> var p={}; 也就是说,初始化一个对象p。
<2> p.__proto__=Person.prototype;
<3> Person.call(p);也就是说机关p,也可以称之为初始化p。
关键在于第二步,我们来证实一下:
var Person = function () { };
var p = new Person();
alert(p.__proto__ === Person.prototype);
</script>
!注:__proto__这个属性只有在firefox或者chrome浏览器中才是公开容许接见的,是以,其他基于IE内核的浏览器是不会返回true的。
?
?
?
?
这段代返回true。申明我们步调2的正确。
那么__proto__是什么?我们在这里简单地说下。每个对象都邑在其内部初始化一个属性,就是__proto__,接见一个对象的属性时,若是这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有本身的__proto__,于是就如许一向找下去,也就是我们日常平凡所说的原型链的概念。
遵守标准,__proto__是不合错误外公开的,也就是说是个私有属性,然则Firefox的引擎将他露出了出来成为了一个共有的属性,我们可以对外接见和设置。
好,概念说清了,让我们看一下下面这些代码:
var Person = function () { };
Person.prototype.Say = function () {
alert("Person say");
}
var p = new Person();
p.Say();
</script>
?
这段代码很简单,信赖每小我都如许写过,那就让我们看下为什么p可以接见Person的Say。
起首var p=new Person();可以得出p.__proto__=Person.prototype。那么调用p.Say()时,起首p中没有Say这个属性,于是,他就须要到他的__proto__中去找,也就是Person.prototype,而我们在上方定义了 Person.prototype.Say=function(){}; 于是,就找到了这个办法。
好,接下来,让我们看个更错杂的。
var Person = function () { };
Person.prototype.Say = function () {
alert("Person say");
}
Person.prototype.Salary = 50000;
var Programmer = function () { };
Programmer.prototype = new Person();
Programmer.prototype.WriteCode = function () {
alert("programmer writes code");
};
Programmer.prototype.Salary = 500;
var p = new Programmer();
p.Say();
p.WriteCode();
alert(p.Salary);
</script>
我们来做如许的推导:
var p=new Programmer()可以得出p.__proto__=Programmer.prototype;
而在上方我们指定了Programmer.prototype=new Person();我们来如许拆分,var p1=new Person();Programmer.prototype=p1;那么:
p1.__proto__=Person.prototype;
Programmer.prototype.__proto__=Person.prototype;
由按照上方获得p.__proto__=Programmer.prototype。可以获得p.__proto__.__proto__=Person.prototype。
好,算清楚了之后我们来看上方的成果,p.Say()。因为p没有Say这个属性,于是去p.__proto__,也就是 Programmer.prototype,也就是p1中去找,因为p1中也没有Say,那就去p.__proto__.__proto__,也就是 Person.prototype中去找,于是就找到了alert(“Person say”)的办法。
其余的也都是同样的事理。
这也就是原型链的实现道理。
最后,其实prototype只是一个假象,他在实现原型链中只是起到了一个帮助感化,换句话说,他只是在new的时辰有着必然的价值,而原型链的本质,其实在于__proto__!
?
——————————————————————————————————————————————————————
以上涉及到一个概念—原型链,那么什么是原型链呢?
看下面代码及其注释便可懂得。
【
起首声明:
Function和Object是js中的两个内置对象。js中包含Function在内的所有都是一个Object
Function 本身也是一个“类”,然而,所有“类”都是Funciton的实例,于是 Function instanceof Function; 为true。同时,所有对象都是 Object 类的实例,Object 本身也是一个对象,所有又有 Object instanceof Object 也为 true。别的,还可以认为 Funciton 类型是 Object?? 类型的一个“派生类”,class Function 持续了class Object ,是 class Object 的一个“子类”。看代码:
<script>
var Person = function () { };
?var p = new Person();
alert(p instanceof Object); //true
alert(Person instanceof Function); //true
</script>
?】
?
window.onload = function() { /* 每个对象实例都有个属性成员用于指向到它的instanceof 对象(暂称为父对象)的原型(prototype) 我们把这种层层指向父原型的关系称为[原型链 prototype chian] 原型也具有父原型,因为它往往也是一个对象实例,除非我们工钱地去改变它 在JavaScript中,"一切都是对象,函数是第一型。" Function和Object都是函数的实例。 Function的父原型指向到Function的原型,Function.prototype的父原型是Object的原型 Object的父原型也指向到Function的原型,Object.prototype是所有父原型的顶层 在spiderMonkey引擎中,父原型可以经由过程 __proto__ 进行接见 大师在看的时辰最后能反复的读几篇,能加深懂得,尤其是原型,父原型,还有原型链的意思. * prototype 接见的是原型 * __proto__ 接见的父原型 * instanceof 原型链的父类 */ Function.prototype.hi = function(){alert(""hi Function"");} Object.prototype.hi = function(){alert(""hi Object"");} var a = function() { this.txt = ""a""; }; a.prototype = { say: function(){alert(""a"");} }; alert(a instanceof Function); //a是Function的实例; alert(a.__proto__ == = Function.prototype); //a的父原型指向到Function的原型; //a.__proto__父原型 Function //Function.prototype 父原型 Function alert(Function instanceof Object); //Function是Object的实例; alert(Function.__proto__ == = Function.prototype); //Function的父原型指向到Function的原型; alert(Function.prototype.__proto__ == = Object.prototype); //Function的原型的父原型指向到Object的原型 alert(Object.__proto__ == = Function.prototype); //Object的父原型指向到Function的原型; alert(Object.prototype.__proto__); //Object的原型是所有父原型的顶端,它不再具有父原型,所以成果为null; alert(a.prototype instanceof Object); //a的原型也是一个对象 alert(a.prototype.__proto__ == = Object.prototype); //a的原型的父原型指向Object的原型 };
?
?
?
定义:
1. constructor: Returns a reference to the Object function that created the instance""s prototype.
2. instanceof: The instanceof operator tests whether an object has in its prototype chain the prototype property of a constructor.
__proto__和prototype的关系:
1. A function""s .prototype is actually the prototype of things made by it, not its prototype.
2. __proto__ is the actual prototype, but don""t use it.
发表评论
-
javascript 数据类型判断
2014-10-13 14:44 758javascript 中判断数据类型有两种情况:1.基本数据 ... -
阻止事件追加
2014-10-11 12:04 895有些时候可以使用 e.stopPropagation(); ... -
试读《ECMAScript6入门》
2014-09-20 00:01 1327ECMA 对于前端开发工作的我并不陌生,《Ja ... -
javascript 宽度获取
2014-09-11 11:27 618网页可见区域宽:document.body.clientWi ... -
用jquery开发幻灯片播放功能(完整版)
2014-04-10 12:08 952很久没有写了,今天写一个简单的效果,幻灯片无限滚动和大家一起 ... -
看了一篇 “javascript 绝句欣赏”
2013-07-24 16:37 0看了一篇 “javascript 绝句欣赏”这里面的代码写 ... -
javascript 闭包的理解
2013-05-17 16:06 1176javascript中的作用域、 ... -
javascript forEach的实现
2013-04-10 11:43 643function forEach(ary,fn){ ... -
call理解
2013-04-09 16:40 883call使用情况 1.class.call(obj) ... -
富文本框参考
2013-01-31 17:56 0http://www.cnblogs.com/bluedrea ... -
javascript call的使用
2012-11-06 01:18 712Javascript中call的使用自己感觉蛮纠结的,根 ... -
javascript 继承的实现
2012-11-06 00:55 8541.类抄写 function parent(){ ... -
利用正则表达式实现去除所有HTML标签代码
2012-09-22 10:00 2620"<[^>]*>"; / ... -
javascript判断页面加载(页面下载)是否完毕
2012-09-11 16:03 1626首先要明确两个概念 1.window.onload:页面加载 ... -
如何发送简单请求
2012-08-30 15:08 848使用XMLHttpRequest 对象发送请求的基本步骤: ... -
javascript 正则 捕获组与非捕获组
2012-08-30 11:26 2677捕获组 语法: ... -
dom
2012-08-23 11:08 788继承在dom中的重要性,以下为a标记继承关系图 ... -
查看浏览器dom支持情况
2012-08-23 10:15 763查看浏览器dom支持情况 http://www.w3. ... -
浏览器之间的差别是处理dom对象的不同
2012-08-22 17:24 764dom是一组用来描述脚本怎样与结构化文档进行交互和访问的 ... -
作用域链
2012-08-22 16:04 810作用域链 《javascript DOM高级程序设计》 P35 ...
相关推荐
标题 "prototype_oop_javascript_ruby_prototype_" 暗示了我们将探讨的是关于原型(Prototype)面向对象编程(Object-Oriented Programming, OOP)的概念,主要关注JavaScript和Ruby这两种语言之间的相似性和差异性...
例如,`Foo.prototype`也有自己的`__proto__`,它可能指向`Function.prototype`,而`Function.prototype`的`__proto__`则指向`Object.prototype`,最后达到`null`。 通过`new`操作符实例化函数时,会创建一个新的...
__proto__是内部原型,prototype是构造器原型(构造器其实...一、所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 代码如下: Number.__proto__ === Function.prototype // t
在JavaScript中,prototype和__proto__是理解对象原型继承机制的关键知识点。下面将详细介绍这两者之间的关系以及它们在JavaScript对象继承中所扮演的角色。 首先,prototype属性是函数所独有的。在JavaScript中,...
此外,除了 `Function.prototype`,其他构造器的 `prototype` 都是对象,例如 `Number.prototype`、`Boolean.prototype` 等,它们的类型为 "object": ```javascript typeof Number.prototype // object typeof ...
在JavaScript中,每个对象都有一个特殊的内部属性[[Prototype]],通常通过`__proto__`或`Object.getPrototypeOf`来访问。 1. **原型链**:当试图访问一个对象的属性时,JavaScript会首先在该对象自身查找,如果没有...
JavaScript中的`prototype`是一个核心概念,它涉及到对象继承和函数原型。在JavaScript中,每创建一个函数,该函数就会自动获得一个名为`prototype`的属性,这个属性是一个对象,用于实现对象间的继承。同时,每个...
JavaScript中的原型(Prototype)机制是实现继承的一种方式,它涉及到两个关键的概念:`prototype`和`__proto__`。这两个属性在JavaScript的对象和函数中扮演着不同的角色。 首先,`prototype`属性主要用于函数对象...
JavaScript会查找其`__proto__`指向的原型对象,如果在原型对象中仍然找不到,就会继续查找原型对象的`__proto__`,这个过程会持续到找到属性或者查找到最顶层的原型对象——`Object.prototype`为止,如果`Object....
在旧版浏览器中,可以通过`__proto__`直接访问,但在ES5及以后的规范中,推荐使用`Object.getPrototypeOf`或`Object.prototype.isPrototypeOf`来操作原型链。 ```javascript function Person() {} let person = new...
在JavaScript中,每个对象都有一个内部属性`[[proto]]`,这个属性通常通过`__proto__`访问,它指向创建该对象的函数的`prototype`属性。原型链的主要作用是使得一个对象能够通过其构造函数的原型链访问到其构造函数...
JavaScript中的`prototype`属性是实现面向对象编程的关键概念之一,尤其在JavaScript中,它用于实现对象的继承。本文将深入探讨`prototype`的含义、作用以及如何使用。 1. **什么是prototype** 在JavaScript中,每...
### JavaScript中的Object与Function #### 一、引言 随着JavaScript的发展与标准化,这门语言已经成为Web开发领域不可或缺的一部分。然而,在深入学习JavaScript的过程中,不少开发者对于语言内部的一些概念仍感...
prototype,每一个函数对象都有一个显示的prototype属性,它代表了对象的原型(Function.prototype函数对象是个例外,没有prototype属性)。 __proto__:每个对象都有一个名为__proto__的内部隐藏属性,指向于它所对应的...
JavaScript中的...总结,JavaScript中的prototype属性是实现面向对象编程的重要组成部分,它涉及到继承、方法共享以及原型链等核心概念。理解并熟练运用这些知识,能够帮助开发者构建更复杂、更高效的应用程序。
每个JavaScript对象都有一个内部`[[Prototype]]`链接到另一个对象,通常可以通过`__proto__`或`Object.getPrototypeOf()`访问。通过原型,子对象可以继承父对象的属性和方法。例如: ```javascript var person = ...
数据类型分为基本类型和引用类型,基本类型包括String、Number、Boolean、Null、Undefined,而引用类型主要是Object,其中Array、Function也是Object的子类型。 控制流是程序执行顺序的关键部分,if...else语句用于...