javascript变量作用域在不同浏览器的处理

2016-02-20 00:40 5 1 收藏

生活已是百般艰难,为何不努力一点。下面图老师就给大家分享javascript变量作用域在不同浏览器的处理,希望可以让热爱学习的朋友们体会到设计的小小的乐趣。

【 tulaoshi.com - Web开发 】

1.关于prototype:这里prototype是javascript的一个特性,不是那个有名的prototype框架:

script type="text/javascript"
var string="hello world";
try{
  alert(string.phone());
}catch(e){alert(e);}
String.prototype.phone=function()
{
  return "159-10957151";
}
 
alert(string.phone());
/script

2.关于变量作用域,和IE,firefox对js的不同处理,这里有几个例子,有几个是原来从别处看到的记的笔记,有的是我自己挖掘出来的.

2.1

script type="text/javascript"
  var deep_thought = {
   the_answer: 42,
   ask_question: function () {
    return this.the_answer;
   }
  };
 
  var the_meaning = deep_thought.ask_question();
  alert(the_meaning);
/script

2.2

script type="text/javascript"
  function test_this() {
   return this;
  }
  var i_wonder_what_this_is = test_this();
  alert(i_wonder_what_this_is);
  // result: [object window];
/script

2.3:

script type="text/javascript"
  function click_handler() {
   alert(this); // 弹出 window 对象
  }
/script
 ...
button id='thebutton' onclick='click_handler()'Click me!/button

2.4

script type="text/javascript"
  function click_handler(obj) {
   alert(obj);
   //result:[object HTMLButtonElement]
  }
/script
 ...
button id='thebutton' onclick='click_handler(this)'Click me!/button

2.5

button id='thebutton' onclick='click_handler(this)'Click me!/button
script type="text/javascript"
 function BigComputer(answer) {
  this.the_answer = answer;
  this.ask_question = function () {
   alert(this.the_answer);
  }
 }
 
 function addhandler() {
  var deep_thought = new BigComputer(42),
   the_button = document.getElementById('thebutton');
   the_button.onclick = deep_thought.ask_question;
 }
 window.onload = addhandler;
 //result [undefined]
/script
 ...

2.6

button id='thebutton' onclick='click_handler(this)'Click me!/button
script type="text/javascript"
 function BigComputer(answer) {
  var self=this;
  self.the_answer = answer;
  self.ask_question = function () {
   alert(self.the_answer);
  }
 }
 
 function addhandler() {
  var deep_thought = new BigComputer(42),
   the_button = document.getElementById('thebutton');
   the_button.onclick = deep_thought.ask_question;
 }
 window.onload = addhandler;
 //result [42]
/script
 ...

2.7

button id='thebutton' onclick='click_handler(this)'Click me!/button
script type="text/javascript"
function btn_click(){
  alert(this);
}
 
 function addhandler() {
   the_button = document.getElementById('thebutton');
   the_button.onclick = btn_click;
 }
 
 window.onload = addhandler;
 
 //result [undefined]
/script
 ...

2.8

button id='thebutton' onclick='click_handler(this)'Click me!/button
script type="text/javascript"
function real_func()
{
  alert(this);
}
function btn_click(){
  setTimeout(real_func,100);
}
 
 function addhandler() {
   the_button = document.getElementById('thebutton');
   the_button.onclick = btn_click;
 }
 
 window.onload = addhandler;
 
 //result [undefined]
/script
 ...

2.9

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

button id='thebutton' onclick='click_handler(this)'Click me!/button
script type="text/javascript"
 Function.prototype.bind = function(obj) {
  var method = this,
   temp = function() {
    return method.apply(obj, arguments);
   };
 
  return temp;
 }
var  real_func=function()
{
  alert(this);
}
function btn_click(){
  setTimeout( real_func.bind(this),100);
}
 function addhandler() {
   the_button = document.getElementById('thebutton');
   the_button.onclick = btn_click;
 }
 window.onload = addhandler;
 //result [undefined]
/script
 ...

2.10

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

script
  //** variables need to be defined
  alert(document);          // [object HTMLdocument]
  alert(window.document);   // [object HTMLdocument]
 
  alert(window.face);      //pretty
  var face="pretty";
  alert(face);             //pretty
  alert(window.face);      //pretty
  alert(window.sock);      //undefined
  alert(sock);              // ERROR: sock not defined
/script

2.11

script type="text/javascript"
function method()
{
  var window={};
  alert(window.location);
}
  alert(window.location);
  method();
  alert(window.location);
/script

2.12

script type="text/javascript"
   var window={};//ERROR:非法赋值!
   // this works in IE,but throw an Exception in firefox
   alert(window.location);
/script

2.13

script type="text/javascript"
  /** 这是一段很让人恼火的代码
  可以禁用alert
  */
  window.alert("hello world");
  window.alert=function(str){
      document.write(str);
  };
  alert("hello world");
  window.alert("hello world");
/script

2.14:

注意这三个html文件的结果有什么不同.
a.html:
script type="text/javascript"
alert(sock);
function sock()
{
  alert("function sock executed!");
}
alert(sock);
/script
b.html:
script type="text/javascript"
alert(sock);
var sock=function()
{
  alert("function sock executed!");
}
alert(sock);
/script
c.html:
script type="text/javascript"
// 这里并不弹出"undefined"
// 有点偏心啊!
alert(sock);
/script

2.15

看看IE,firefox下分别运行有何不同:

script type="text/javascript"
Object.prototype.hello=function(){
  alert("hello");
}
window.hello();
/script

来源:http://www.tulaoshi.com/n/20160220/1632351.html

延伸阅读
标签: Web开发
原文: http://www.noupe.com/css/using-javascript-to-fix-12-common-browser-headaches.html 我们提倡无论何时都尽可能地使用CSS,这样我们更容易取得成功.现在浏览器对CSS的支持已经非常好,肯定足以让你用来控制你的网页布局与排版.但,即使如此,还是有某些页面元素会在不同的浏览器下表现也不一样. 如果你不了解其中的原由,请不用担心,...
标签: Web开发
作用域(scope)是JavaScript语言的基石之一,在构建复杂程序时也可能是最令我头痛的东西。记不清多少次在函数之间传递控制后忘记关键字引用的究竟是哪个对象,甚至,我经常以各种不同的混乱方式来曲线救国,试图伪装成正常的代码,以我自己的理解方式来找到所需要访问的变量。 这篇文章将正面解决这个问题:简述上下文(context)和作用域...
标签: Web开发
写在前面的话:每个人都会犯错——有时候‘孰能无过,过而能改,善莫大焉’,有时候知道自己错了却没有机会更改。其实,错了并不仅仅是错了,做错了,除了及时改正和弥补之外,最重要的是为自己犯的错承担所有责任。 2009年3月14日,我去参加网易互动的专场招聘会,应聘网页工程师的职位。有幸参加笔试,然后有幸栽在笔试,呵呵。废话...
标签: Web开发
    你知道世界上有多少种浏览器吗?除了我们熟知的IE, Firefox, Opera, Safari四大浏览器之外,世界上还有近百种浏览器。     几天前,浏览器家族有刚诞生了一位小王子,就是Google推出的Chrome浏览器。由于Chrome出生名门,尽管他还是个小家伙,没有人敢小看他。以后,咱们常说浏览器的“四大才子”就得改称...
标签: Web开发
使用方法: 访问"imagesee.htm的网址+?pic=图片的网址&page=该图片相关网页的网址" 即可,其中page参数可以忽略。 关于ImageSee: ImageSee是开放源代码的网页图片浏览器,由JavaScript写成,是一个完全静态网页。同时支持IE Firefox Opera浏览器。  透过ImageSee,您可以方便的对网上的高清图片(大图片)进行浏览...

经验教程

290

收藏

80
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部