首頁  >  文章  >  web前端  >  JavaScript強化教程-從簡到繁

JavaScript強化教程-從簡到繁

黄舟
黄舟原創
2017-01-21 16:09:071486瀏覽

JavaScript強化教程-從簡到繁

JS,无需编译,直译式脚本语言,解释器是JavaScript引擎-浏览器一部分。
动态类型、弱类型、基于原型,内置支持类型。
组成部分
ECMAScript,描述了该语言的语法和基本对象。
文档对象模型(DOM),描述处理网页内容的方法和接口。
浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。 
编程
JavaScript是一种脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解释运行。直译语言的弱点是安全性较差,
而且在JavaScript中,如果一条运行不了,那么下面的语言也无法运行。而其解决办法就是于使用try{}catch(){}︰
console.log("a");//这是正确的
console.log("b");//这是正确的
console.logg("c");//这是错误的,并且到这里会停下来
console.log("d");//这是正确的
console.log("e");//这是正确的
 
try{console.log("a");}catch(e){}//这是正确的
try{console.log("b");}catch(e){}//这是正确的
try{console.logg("c");}catch(e){}//这是错误的,但是到这里不会停下来,而是跳过
try{console.log("d");}catch(e){}//这是正确的
try{console.log("e");}catch(e){}//这是正确的
Javascript被归类为直译语言,因为目前主流的引擎都是每次运行时加载代码并解译。
Javascript原型总会给人产生一些困惑,无论是经验丰富的专家,还是作者自己也时常表现出对这个概念某些有限的理解,我认为这样的困惑在我们一开始接触原型时就已经产生了,
它们常常和new、constructor相关,特别是函数(function)的原型(prototype)属性(property)。事实上,原型是一种非常简单的概念。为了更好的理解它,我们应该首先记住这个原则
,那就是忘记我们已经学到的关于构造原型(construtor prototypes)的认识。

什么是原型?

原型是一个对象,其他对象可以通过它实现属性继承。

任何一个对象都可以成为原型么?

是

哪些对象有原型

所有的对象在默认的情况下都有一个原型,因为原型本身也是对象,所以每个原型自身又有一个原型(只有一种例外,默认的对象原型在原型链的顶端。更多关于原型链的将在后面介绍)

好吧,再绕回来,那什么又是对象呢?

在javascript中,一个对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,or string),那它就是一个对象

你说每个对象都有一个原型,可是我当我写成({}).prototype 我得到了一个null,你说的不对吧?

忘记你已经学到的关于原型属性的一切,它可能就是你对原型困惑的根源所在。一个对象的真正原型是被对象内部的[[Prototype]]属性(property)所持有。
ECMA引入了标准对象原型访问器Object.getPrototype(object),到目前为止只有Firefox和chrome实现了此访问器。除了IE,其他的浏览器支持非标准的访问器__proto__,
如果这两者都不起作用的,我们需要从对象的构造函数中找到的它原型属性。下面的代码展示了获取对象原型的方法
JavaScript

var a = {}; 

 //Firefox 3.6 and Chrome 5 

 Object.getPrototypeOf(a); //[object Object]   

 //Firefox 3.6, Chrome 5 and Safari 4 

a.__proto__; //[object Object]   

 //all browsers 

 a.constructor.prototype; //[object Object]

var a = {}; 
 
 //Firefox 3.6 and Chrome 5 
 
 Object.getPrototypeOf(a); //[object Object]   
 
 //Firefox 3.6, Chrome 5 and Safari 4 
 
a.__proto__; //[object Object]   
 
 //all browsers 
 
 a.constructor.prototype; //[object Object]

ok,一切都進行的很好,但是false明明是一個主資料類型,可是false.__proto__卻返回了一個值

當你試圖獲取一個主資料類型的原型時,它被強制轉化成了一個物件

//(works in IE too, but only by accident) 
 
false.__proto__ === Boolean(false).__proto__; //true

我想在繼承中使用原型,那我該怎麼做?

如果僅僅只是因為一個實例而使用原型是沒有多大意義的,這和直接添加屬性到這個實例是一樣的,假如我們已經創建了一個實例對象,我們想要繼承一個已經存在的對象的功能比如說Array,我們可以像下面這樣做( 在支援__proto__ 的瀏覽器中)

//unusual case and does not work in IE
var a = {};
a.__proto__ = Array.prototype;
a.length; //0

以上就是JavaScript強化教程——從簡到繁的內容,更多相關內容請關注PHP中文網(www.php.cn )!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn