92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线

首頁

jQuery-獲取內容和屬性

seo達人

jQuery 擁有可操作 HTML 元素和屬性的強大方法。



jQuery DOM 操作

jQuery 中非常重要的部分,就是操作 DOM 的能力。

jQuery 提供一系列與 DOM 相關的方法,這使訪問和操作元素和屬性變得很容易。

提示:DOM = Document Object Model(文檔對象模型)

DOM 定義訪問 HTML 和 XML 文檔的標準:

“W3C 文檔對象模型獨立于平臺和語言的界面,允許程序和腳本動態訪問和更新文檔的內容、結構以及樣式。”



獲得內容 - text()、html() 以及 val()

三個簡單實用的用于 DOM 操作的 jQuery 方法:

text() - 設置或返回所選元素的文本內容

html() - 設置或返回所選元素的內容(包括 HTML 標記)

val() - 設置或返回表單字段的值

下面的例子演示如何通過 jQuery text() 和 html() 方法來獲得內容:



<!DOCTYPE html>

<html>

<head>

<script src="/jquery/jquery-1.11.1.min.js"></script>

<script>

$(document).ready(function(){

  $("#btn1").click(function(){

    alert("Text: " + $("#test").text());

  });

  $("#btn2").click(function(){

    alert("HTML: " + $("#test").html());

  });

});

</script>

</head>



<body>

<p id="test">這是段落中的<b>粗體</b>文本。</p>

<button id="btn1">顯示文本</button>

<button id="btn2">顯示 HTML</button>

</body>



</html>



val()方法例子:



<!DOCTYPE html>

<html>

<head>

<script src="/jquery/jquery-1.11.1.min.js"></script>

<script>

$(document).ready(function(){

$("button").click(function(){

alert("Value:"+$("#test").val());

});

});

</script>

</head>



<body>

<p>姓名:<input type="text" id="test" value="米老鼠"></p>

<button>顯示值</button>

</body>



</html>



獲取屬性 - attr()

jQuery attr() 方法用于獲取屬性值。



<!DOCTYPE html>

<html>

<head>

<script src="/jquery/jquery-1.11.1.min.js"></script>

<script>

$(document).ready(function(){

  $("button").click(function(){

    alert($("#w3s").attr("url"));

  });

});

</script>

</head>



<body>

<p><a url="img/001.jpg" id="w3s">W3School.com.cn</a></p>

<button>顯示 href 值</button>

</body>



</html>

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。

JavaScript變量

seo達人

局部變量

局部變量:在函數內部聲明的變量,只在函數內部起作用。函數的參數也是局部性的,只在函數內部起作用,對于其他的函數或腳本代碼是不可用的。



函數可以訪問函數內部定義的變量,如:



<p>函數可以訪問函數內部定義的變量:</p>

<button type="button" onclick="myFunction()">點我</button>

<p id="demo"></p>

<script>

function myFunction() {

    var a = 4;

    document.getElementById("demo").innerHTML = a a;



</script>



全局變量

在web頁面中全局變量屬于 window 對象,全局變量的作用域是全局性的,即在整個JavaScript程序中,全局變量處處都在。



函數也可以訪問函數外部定義的變量,如:



<p>函數可以訪問定義在函數外的變量:</p>

<button type="button" onclick="myFunction()">點我</button>

<p id="demo"></p>

<script>

var a = 4;

function myFunction() {

document.getElementById("demo").innerHTML = a
a;



</script>



全局和局部變量即便名稱相同,它們也是兩個不同的變量。修改其中一個,不會影響另一個的值。

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計  圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。

HTML li 標簽之間空白間隔的解決辦法

seo達人

問題描述:

做抽屜式菜單時候,在 ie 7 下發現 li 元素之間會留白,如下圖:







原以為是樣式的問題,后來看到有博文寫到“行框的排列會受到中間空白(回車\空格)等的影響,因為空格也屬于字符,這些空白也會被應用樣式,占據空間,所以會有間隔”。







解決辦法:

li 標簽之間的空白,可以通過設置 li 標簽的 font-size 為 0,可以解決:



li{

    padding:0;

    margin:0;

    height: 30px;

    line-height: 30px;

    font-size: 0;          / 設置 font-size 為 0 即可 /

}

修改后的效果如圖:



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計  ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。

li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?(十三)

seo達人

li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?

引起這種空白間隔的原因:

瀏覽器的默認行為是把inline元素間的空白字符(空格換行tab)渲染成一個空格,也就是我們上面的代碼



換行后會產生換行字符,而它會變成一個空格,當然空格就占用一個字符的寬度。

解決方案:

方法一: 既然是因為< li>換行導致的,那就可以將< li>代碼全部寫在一排,如下





<div class="wrap">

<h3>li標簽空白測試</h3>

<ul>

<li class="part1"></li><li class="part2"></li><li class="part3"></li><li class="part4"></li>

</ul>

</div>

1

2

3

4

5

6

7

再刷新頁面看就沒有空白了,就是這么神奇~



方法二: 我們為了代碼美觀以及方便修改,很多時候我們不可能將< li>全部寫在一排,那怎么辦?既然是空格占一個字符的寬度,那我們索性就將



內的字符尺寸直接設為0,將下面樣式放入樣式表,問題解決。

.wrap ul{font-size:0px;}

1

但隨著而來的就是



中的其他文字就不見了,因為其尺寸被設為0px了,我們只好將他們重新設定字符尺寸。

方法三: 本來以為方法二能夠完全解決問題,但經測試,將li父級標簽字符設置為0在Safari瀏覽器依然出現間隔空白;既然設置字符大小為0不行,那咱就將間隔消除了,將下面代碼替換方法二的代碼,目前測試完美解決。同樣隨來而來的問題是li內的字符間隔也被設置了,我們需要將li內的字符間隔設為默認。



.wrap ul{letter-spacing: -5px;}

1

之后記得設置li內字符間隔





.wrap ul li{letter-spacing: normal;}

1

2

詳細看這篇文章 li與li之間有看不見的空白間隔是什么原因引起的?有什么解決辦法?

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計  圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。

后臺返回json數據給前臺和前臺解析json數據(總結)

seo達人

后臺返回json數據給前臺和前臺解析json數據(總結)

一般來說web開發中,前臺采用json數據提交給后臺,后臺處理數據以后返回json數據給前臺,前臺解析json,顯示數據。

總而言之,前后臺直接交換的數據格式最常用的非json數據無疑了。

這里就總結一些json數據的前后臺處理方式。



1.JSON數據

JSON(JavaScript Object Notation, JS 對象簡譜)



是一種輕量級的數據交換格式,比xml更輕巧(由于 JSON 所使用的字符要比 XML 少得多,可以大大得節約傳輸數據所占用的帶寬)。



json是javascript原生格式,就是說在javascript中處理json數據,需要引用其他API或工具包。



簡潔和清晰的層次結構使得 JSON 成為理想的數據交換語言。 易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。



只需要記住!

Json是一種文本字符串!被存儲在responseText屬性中,而讀取json數據可以使用javascript的eval函數來解析json。



2.json規則:

在 JS 語言中,一切都是對象,對象是一個無序的 “鍵/值” 對集合。

因此,任何支持的類型都可以通過 JSON 來表示,例如字符串、數字、對象、數組等。但是對象和數組是比較特殊且常用的兩種類型:

? 對象表示為鍵值對.

? 數據由逗號分隔.

? 花括號{}保存對象.

? 方括號[]保存數組.



鍵/值對組合中的鍵名寫在前面并用雙引號 “” 包裹,使用冒號 : 分隔,然后緊接著值:



{"firstName": "Json"}

1

這很容易理解,等價于這條 JavaScript 語句:



{firstName : "Json"}

1

對象在 JS 中是使用花括號包裹 {} 起來的內容,數據結構為 {key1:value1, key2:value2, …} 的鍵值對結構。



在面向對象的語言中,key 為對象的屬性,value 為對應的值。



鍵名可以使用整數和字符串來表示,值的類型可以是任意類型。



數組在 JS 中是方括號 [] 包裹起來的內容,數據結構為 [“java”, “javascript”, “vb”, …] 的索引結構。



在 JS 中,數組是一種比較特殊的數據類型,它也可以像對象那樣使用鍵值對,但還是索引使用得多。同樣,鍵名可以使用整數和字符串來表示,值的類型可以是任意類型。



3.JSON 與 JS 對象的關系:

很多人搞不清楚 JSON 和 Js 對象的關系,甚至連誰是誰都不清楚。其實,可以這么理解:

JSON 是 JS 對象的字符串表示法,它使用文本表示一個 JS 對象的信息,本質是一個字符串。

如:



var obj = {a: 'Hello', b: 'World'};    //這是一個對象,注意鍵名也是可以使用引號包裹的

var json = '{"a": "Hello", "b": "World"}';  //這是一個 JSON 字符串,本質是一個字符串

1

2

4.后臺返回json數據

一般來說,使用JsonObject來將Java類型數據轉換成Json類型,首先要下載該庫相關的jar包,下載地址如下:



json-jar包下載



JsonObject的使用:

后臺controller部分代碼:



JSONObject object = new JSONObject();  //創建Json對象

object.put("username", "張三");         //設置Json對象的屬性

object.put("password", "123456");

System.out.println(object.toString());  //調用toString方法將json對象轉換成json字符串



//把json數據返回給瀏覽器:

PrintWriter out = cu.getWriterOut(response);

out.print(object.toString());

//或者

response.getWriter().write(jsonObject.toString());



1

2

3

4

5

6

7

8

9

10

11

5.在JavaScript代碼中接收Json數據:

假設result為瀏覽器得到的json數據,可以使用以下js代碼可以將json對象轉換為字符串。



比如:



通過$.get從后臺獲取了一段json串{“id”:“1”,“name”:“ww”},然后要拿到這里面的id和name值:



注意!注意!注意!

如果你直接這么寫!



$.get(url,

     function(data) {

       alert("ID:" + data.id + "\nName:" + data.name);

     });

1

2

3

4

直接這樣寫的話,界面會alert提示undefined,因為沒能正確解析返回的字符串。



圖示:





解決方案:



1、 需要用eval()函數



將返回的串轉化成可用的strig串,eval(data),但是因為原串里面是以{}開始和結束的,會被認為是可執行方法,因此需要加上()包圍起來,最終形成:



var jsonobj= eval('(' + data + ')');  // 把JSON字符串解析為javascript對象

1

然后再



alert("ID:" + jsonobj.id + "\nName:" + jsonobj.name);

1

各種正常的按key取值,就能正常顯示了。



2、獲取的時候就直接表示返回的是json格式,用.getJSON代替 .getJSON代替.getJSON代替.get,其他代碼不變,也能正常獲取。



也可以直接獲取json對象的屬性,如下:console.log(result.username);



前端js代碼:



$.ajax({

url: url,

type: "POST",

data: parameters,

dataType:"json",

async: false,

success: function(result){

var newData = JSON.stringify(result);    //將json對象轉換為字符串

newData = eval("("+newData+")");   /解析json



var annualDays = newData.annualDays;

var entryDate = newData.entryDate;



$("input[name='extendDataFormInfo.value(fd_shengyu_nianjia)']").val(annualDays);

$("input[name='extendDataFormInfo.value(fd_ruzhi_date)']").val(entryDate);



}});



1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

ps: 注意注釋中的代碼,如果少了這一句,那么直接alert(result);得到的結果會是







所以在這里stringfy()的作用是用于從一個對象解析出字符串

加上了var newData = JSON.stringify(result);這句,然后你再alert(newData);

得到的就會是你想要的結果,如下:





另外:

如果返回的json數據格式不是很規范的解決辦法:



判斷后臺返回的數據格式是否字符串,是則轉,不是則不轉?



  var $obj = (typeof data.content == 'string') ? JSON.parse(data.content):data.content

1

總結:



前臺發送請求,并且設置數據為json格式‘

    $.ajax({

    url:"selectByid.",

    datatype:'json',

    data:{id:id}, // 發送數據 

1

2

3

4

數據回調函數

success:function(data){

alert(data);

var json = eval("("+data+")");//將json類型字符串轉換為json對象

alert("hjf"+json.name);

1

2

3

4

給對應的input賦值:

$("#id").val(json.id),

$("#name").val(json.name),

$("#age").val(json.age);

1

2

3

后臺代碼:返回json數據

response.getWriter().print(str);    //將數據返回前臺ajax

1

6.前端ajax接不到json解決?

在前臺:



async:false,                //加上這個屬性就好了

1

7.返回的json字符串中有轉義符解決?

比如:



"result":"{\"id\":\"60\",\"qid\":\"1\",\"bazi\":\"baiz\",\"shenxiao\":\"\",\"xingzuo\":\"\",\"wuge\":\"\",\"jianyi\":\"\",}"

1

這樣我們我們使用JSON.parse(result) ,直接轉化為json的話是會報錯的。



解決方法:

我們先把轉義符用正則表達式去掉,



   var string = result.replace("/\","");

   var getDataArray = JSON.parse(string)

1

2

這樣就OK了,不過要注意有時候也是需要指定返回數據類型的

dataType:“json”



8.使用其他的json依賴包方式:

引入阿里巴巴的json依賴包:



    <dependency>

     <groupId>com.alibaba</groupId>

     <artifactId>fastjson</artifactId>

     <version>1.2.9</version>

    </dependency>

1

2

3

4

5

模擬后臺:



    String params="{\"channelCode\":\"bbb\",\"accountNo\":\"121300000932\",\"message\":\"字符信息解密成功\",\"status\":\"1\"}";

    JSONObject pa=JSONObject.parseObject(params);

    System.out.println(pa.getString("message"));

1

2

3

結果:





或者:

引入net.sf.json-lib依賴包:



    <dependency>

      <groupId>net.sf.json-lib</groupId>

      <artifactId>json-lib</artifactId>

      <version>2.4</version>  

      <classifier>jdk15</classifier>

    </dependency>

1

2

3

4

5

6

后臺:



String params="{\"channelCode\":\"ccy\",\"accountNo\":\"121300000932\",\"message\":\"字符信息解密成功\",\"status\":\"1\"}";

JSONObject pa=JSONObject.fromObject(params);

String accountNo=pa.getString("accountNo");

System.out.println(accountNo);

1

2

3

4

結果:





9.后臺對象轉換json數據返回給前臺

List集合轉換成json代碼:



List list = new ArrayList();

list.add( "first" );

list.add( "second" );

JSONArray jsonArray2 = JSONArray.fromObject( list );

1

2

3

4

Map集合轉換成json代碼:



  Map map = new HashMap();

map.put("name", "json");

map.put("bool", Boolean.TRUE);

map.put("int", new Integer(1));

map.put("arr", new String[] { "a", "b" });

map.put("func", "function(i){ return this.arr[i]; }");

JSONObject json = JSONObject.fromObject(map);

1

2

3

4

5

6

7

或者在項目中加入引入JSON-lib包,JSON-lib包同時依賴于以下的JAR包:

下載地址。



  1.commons-lang.jar

  2.commons-beanutils.jar

  3.commons-collections.jar

  4.commons-logging.jar 

  5.ezmorph.jar

  6.json-lib-2.2.2-jdk15.jar

1

2

3

4

5

6

用法同上



JSONObject jsonObject = JSONObject.fromObject(message);

getResponse().getWriter().write(jsonObject.toString());

1

2

當把數據轉為json后,用如上的方法發送到客戶端。前端就可以取得json數據了。(可以參考最下面的實例)



10.后臺返回數據給前臺,json中文亂碼解決方法

在實際運用場景中,當前臺發起請求后,我們需要從后臺返回數據給前臺,這時,如果返回的數據中包含中文,則經常會出現在后臺查詢出來都是好好,但是傳輸回去就莫名的亂碼了,而且即使在 web.xml 中進行編碼過濾了,但還是亂碼。



解決辦法:

只需要在 spring-mvc.xml 配置文件中配置一次就好,省去了我們重復寫的麻煩,配置內容如下:



<!--自定義消息轉換器的編碼,解決后臺傳輸json回前臺時,中文亂碼問題-->

    <mvc:annotation-driven >

        <mvc:message-converters register-defaults="true">

            <bean class="org.springframework.http.converter.StringHttpMessageConverter" >

                <property name = "supportedMediaTypes">

                    <list>

                        <value>application/json;charset=utf-8</value>

                        <value>text/html;charset=utf-8</value>

                        <!-- application 可以在任意 form 表單里面 enctype 屬性默認找到 -->

                        <value>application/x-www-form-urlencoded</value>

                    </list>

                </property>

            </bean>

            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" ></bean>

        </mvc:message-converters>

    </mvc:annotation-driven>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

加上這段配置,保存重新運行,再次訪問,會發現,原先的中文亂碼都已經正常顯示了。



方法二:在后臺的方法映射添加:



@RequestMapping(value="/getphone",produces = “text/plain;charset=utf-8”)



11.Spring MVC返回json數據的方式

  1. 采用@ResponseBody注解

    @ResponseBody 注解的作用是:



    將controller的方法返回的對象通過適當的轉換器轉換為指定的格式之后,寫入到response對象的body區,通常用來返回JSON數據或者是XML數據,需要注意的呢,在使用此注解之后不會再走試圖處理器,而是直接將數據寫入到輸入流中,他的效果等同于通過response對象輸出指定格式的數據。



    使用舉例:





    使用@ResponseBody 注解返回響應體 直接將返回值序列化json

    優點:不需要自己再處理



    再舉例:



    RequestMapping("/login")

    @ResponseBody

    public User login(User user){

    return user;

    }

    1

    2

    3

    4

    5

    使用@ResponseBody 注解返回響應體 直接將返回值序列化json。



    User字段:userName pwd,那么在前臺接收到的數據為:’{“userName”:“xxx”,“pwd”:“xxx”}’,效果等同于如下代碼:



    @RequestMapping("/login")

    public void login(User user, HttpServletResponse response){

    response.getWriter.write(JSONObject.fromObject(user).toString());

    }



    1

    2

    3

    4

    5

    需要在springmvc的配置文件xml中添加:



    <mvc:annotation-driven/>  

    1
  2. 采用工具類,進行json格式轉換帶回

    JSON-lib包是一個beans,collections,maps,java arrays 和XML和JSON互相轉換的包。在本例中,我們將使用JSONObject類創建JSONObject對象,然后我們打印這些對象的值。為了使用JSONObject對象,我們要引入"net.sf.json"包。為了給對象添加元素,我們要使用put()方法。



    要使程序可以運行必須引入JSON-lib包,JSON-lib包同時依賴于以下的JAR包:



    commons-lang.jar

    commons-beanutils.jar

    commons-collections.jar

    commons-logging.jar 

    ezmorph.jar

    json-lib-2.2.2-jdk15.jar

    1

    2

    3

    4

    5

    6

    效果:



    工具類:

    ResponseUtil.java



    package com.zout.utils;

    import java.io.PrintWriter;

    import javax.servlet.http.HttpServletResponse;

    import net.sf.json.JSONArray;

    import net.sf.json.JSONObject;



    /*

     
    @class_name:ResponseUtil  

     @param: EasyUi-響應工具類

     
    @return: 返回字符串格式數據、result是JSONObject對象(json對象)

     @author:Zoutao

     
    @createtime:2018年3月8日

     /

    public class ResponseUtil {

    public static void write(HttpServletResponse response, Object result)

    throws Exception {

    response.setContentType("text/html;charset=utf-8");

    response.addHeader("Access-Control-Allow-Origin", "
    ");

    PrintWriter out = response.getWriter();

    out.println(result.toString());

    System.out.println("帶回的json字符串為:"+result.toString()+"類型為:"+result.getClass().getName());

    out.flush();

    out.close();

    }



    public static void main(String[] args) throws Exception {

    /在web運用控制層中調用如下:/

    JSONObject result = new JSONObject(); //創建json對象

    JSONArray jsonArray = JSONArray.fromObject("name:zhangsan"); //字符串轉為json數組

    result.put("rows", jsonArray);  //放入json數組中,并起個名字

    HttpServletResponse response = null; //jsp的response對象

    ResponseUtil.write(response, result); //result寫入response帶回前臺,jsp按名字拿取。

    }

    }



    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    后臺具體調用:



    JSONObject result = new JSONObject();

    if (resultTotal > 0) { //處理結果

    System.out.println("操作成功。");

    result.put("success",true)

    result.put("message","操作成功"); //消息語句

    } else {

    System.out.println("操作失敗。");

    result.put("success", false);

    result.put("message","操作失敗");

    }

    ResponseUtil.write(response,result); //帶回字符串+狀態碼

    return null;

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    圖:





    后臺已經通過工具類封裝為json字符串了,使用response帶回需要的數據,使用result帶回狀態字符串或狀態碼。



    前臺:

    這是當成返回一個json字符串,然后直接采取字符串截取的方式,取出消息語句message等消息。





    這是另外一種寫法:就是解析傳回來的json字符串我js的對象,然后按照key/value的取值。



      function (data) {

              var data=eval("("+data+")");  //解析json

             //alert(data.message)

                $.messager.show({

                  title:'消息',

                  msg:data.message,  //按key取值

                  timeout:1000,

                  showType:'slide',

                  height:120,

                 width:200

         });

     });

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    推薦這種方式。

    效果圖:





    以上都是后臺返回json數據給前臺和前臺解析json數據的一些總結,還有json數據的封裝,工具類的使用等等,東西有點復雜有點多,挑選自己需要的地方即可。

    另外的一些常用的web開發json:



    Json–Java數據類型對照表(映射)表


javascript基礎———原型、原型對象和原型鏈

seo達人

原型:函數中的屬性prototype,她的名字就叫原型??梢酝ㄟ^也只能通過prototype添加可繼承的屬性和方法

原型對象:函數中prototype中的proto 和對象中的proto

先記住原型(prototype)和原型對象(proto)

下面用代碼解釋原型、原型對象、 原型鏈

<!DOCTYPE html>

<html>

   <head>

    <meta charset="utf-8">

    <title>對象</title>

   </head>

   <body>

    <script type="text/javascript">

       //創建一個對象和一個函數

       var obj = {}

       console.log(obj.proto)//obj有原型對象

       function objFun (){}

       console.log(objFun.prototype) //objFun 原型

       console.log(objFun.prototype.proto) //原型中有原型對象

       console.log('*華麗的分割線***')

       // 以objFun為構造函數 (為了把構造函數和普通函數做區分,通常把構造函數名首字母大寫)

       // 添加屬性和方法

       objFun.prototype.name='saozhu'

       objFun.prototype.say = function(){

        console.log(this.name+'-騷豬')

       }

       // 創建實例對象1

       var obj1=new objFun()

       console.log(obj1)//打印對象 空對象

       console.log(obj1.name) //騷豬 證明obj1繼承了objFun函數的屬性

       console.log('*華麗的分割線***')

       // 此時此刻 可以理解原型鏈了: 

       console.log(obj1.proto=== objFun.prototype)

       //true 

       // 原型鏈是有實例對象的proto(原型對象)指向構造函數函數的原型(prototype)

       console.log(objFun.prototype.proto==window.Object.prototype)

       // true

       // 然后構造函數的原型的原型對象(prototype.proto)指向window.Object.protype(對象的原型)

       console.log(window.Object.prototype.proto===null)

       // 這樣的指向關系形成的鏈式關系就是原型鏈

       //鏈式查詢,查詢對象中的屬性和方法,會根據這樣的原型鏈查找,直到找到響應的屬性和方法.找到window.Object.prototype.proto還沒有值,就返回undeifne

       

    </script>

   </body>

</html>


一個例子讓你明白原型對象和原型鏈

seo達人

開篇

之前對js中的原型鏈和原型對象有所了解,每當別人問我什么是原型鏈和原型對象時,我總是用很官方(其實自己不懂)的解釋去描述。有一句話說的好:如果你不能把一個很復雜的東西用最簡單的話語描述出來,那就說明你沒有真正的理解。最近正在讀《Javascript高級程序設計》,書中對原型對象和原型鏈的描述讓我受益匪淺,下面僅用一個對比性的例子來說明。



我們經常會這么寫

    function Person () {

        this.name = 'John';

    }

    var person = new Person();

    Person.prototype.say = function() {

        console.log('Hello,' + this.name);

    };

    person.say();//Hello,John

1

2

3

4

5

6

7

8

上述代碼非常簡單,Person原型對象定義了公共的say方法,雖然此舉在構造實例之后出現,但因為原型方法在調用之前已經聲明,因此之后的每個實例將都擁有該方法。從這個簡單的例子里,我們可以得出:



原型對象的用途是為每個實例對象存儲共享的方法和屬性,它僅僅是一個普通對象而已。并且所有的實例是共享同一個原型對象,因此有別于實例方法或屬性,原型對象僅有一份。



所以就會有如下等式成立:



    person.say == new Person().say

1

可能我們也會這么寫

    function Person () {

        this.name = 'John';

    }

    var person = new Person();

    Person.prototype = {

        say: function() {

            console.log('Hello,' + this.name);

        }

    };

    person.say();//person.say is not a function

1

2

3

4

5

6

7

8

9

10

很不幸,person.say方法沒有找到,所以報錯了。其實這樣寫的初衷是好的:因為如果想在原型對象上添加更多的屬性和方法,我們不得不每次都要寫一行Person.prototype,還不如提煉成一個Object來的直接。但是此例子巧就巧在構造實例對象操作是在添加原型方法之前,這樣就會造成一個問題: 

當var person = new Person()時,Person.prototype為:Person {} (當然了,內部還有constructor屬性),即Person.prototype指向一個空的對象{}。而對于實例person而言,其內部有一個原型鏈指針proto,該指針指向了Person.prototype指向的對象,即{}。接下來重置了Person的原型對象,使其指向了另外一個對象,即



 Object {say: function}

1

這時person.proto的指向還是沒有變,它指向的{}對象里面是沒有say方法的,因為此報錯。



從這個現象我們可以得出:



在js中,對象在調用一個方法時會首先在自身里尋找是否有該方法,若沒有,則去原型鏈上去尋找,依次層層遞進,這里的原型鏈就是實例對象的proto屬性。



若想讓上述例子成功運行,最簡單有效的方法就是交換構造對象和重置原型對象的順序,即:



    function Person () {

        this.name = 'John';

    }

    Person.prototype = {

        say: function() {

            console.log('Hello,' + this.name);

        }

    };

    var person = new Person();

    person.say();//person.say is not a function

1

2

3

4

5

6

7

8

9

10

一張圖讓你秒懂原型鏈

 



其實,只需要明白原型對象的結構即可:



    Function.prototype = {

        constructor : Function,

        proto : parent prototype,

        some prototype properties: ...

    };

1

2

3

4

5

總結:

函數的原型對象constructor默認指向函數本身,原型對象除了有原型屬性外,為了實現繼承,還有一個原型鏈指針proto,該指針指向上一層的原型對象,而上一層的原型對象的結構依然類似,這樣利用proto一直指向Object的原型對象上,而Object的原型對象用Object.prototype.proto = null表示原型鏈的最頂端,如此變形成了javascript的原型鏈繼承,同時也解釋了為什么所有的javascript對象都具有Object的基本方法。



Blog同步


w3cschool編程實戰之JavaScript 隊列

seo達人

JavaScript 隊列

題目:

在計算機科學中 隊列(queue)是一個抽象的數據結構,隊列中的數據條目都是有秩序的。新的條目會被加到 隊列 的末尾,舊的條目會從 隊列 的頭部被移出。



寫一個函數 queue ,用一個數組arr和一個數字item作為參數。數字item添加到數組的結尾,然后移出數組的第一個元素,最后隊列函數應該返回被刪除的元素。

queue([], 1) 應該返回 1

queue([2], 1) 應該返回 2

queue([5,6,7,8,9], 1) 應該返回 5

在 queue(testArr, 10) 之后, testArr[4] 的值應該是 10



通關答案:



function queue(arr, item) {

/下面這兩句是關鍵/

    arr.push(item);

    return arr.shift();// Change this line

}



console.log(queue([], 1));

console.log(queue([2], 1));

console.log(queue([5,6,7,8,9], 1));

// Test Setup

var testArr = [1,2,3,4,5];



// Display Code

console.log("Before: " + JSON.stringify(testArr));

console.log(queue(testArr, 10)); // Modify this line to test

console.log("After: " + JSON.stringify(testArr));



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計  包裝設計 、 圖標定制  用戶體驗 、交互設計、 網站建設 、平面設計服務。

頁面跳轉的兩種方式(轉發和重定向)區別及應用場景分析

seo達人

轉發和重定向區別詳解

        作為一名程序員,特別是java web開發的程序員,在使用servlet/jsp的時候,我們必須要知道實現頁面跳轉的兩種方式的區別和聯系:即轉發和重定向的區別。



      1、RequestDispatcher.forward方法只能將請求轉發給同一個WEB應用中的組件;而HttpServletResponse.sendRedirect 方法不僅可以重定向到當前應用程序中的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。如果傳遞給HttpServletResponse.sendRedirect 方法的相對URL以“/”開頭,它是相對于整個WEB站點的根目錄;如果創建RequestDispatcher對象時指定的相對URL以“/”開頭,它是相對于當前WEB應用程序的根目錄。、



      2、調用HttpServletResponse.sendRedirect方法重定向的訪問過程結束后,瀏覽器地址欄中顯示的URL會發生改變,由初始的URL地址變成重定向的目標URL;而調用RequestDispatcher.forward 方法的請求轉發過程結束后,瀏覽器地址欄保持初始的URL地址不變。



      3、HttpServletResponse.sendRedirect方法對瀏覽器的請求直接作出響應,響應的結果就是告訴瀏覽器去重新發出對另外一個URL的 訪問請求,這個過程好比有個綽號叫“瀏覽器”的人寫信找張三借錢,張三回信說沒有錢,讓“瀏覽器”去找李四借,并將李四現在的通信地址告訴給了“瀏覽器”。于是,“瀏覽器”又按張三提供通信地址給李四寫信借錢,李四收到信后就把錢匯給了“瀏覽器”??梢?,“瀏覽器”一共發出了兩封信和收到了兩次回復, “瀏覽器”也知道他借到的錢出自李四之手。RequestDispatcher.forward方法在服務器端內部將請求轉發給另外一個資源,瀏覽器只知道發出了請求并得到了響應結果,并不知道在服務器程序內部發生了轉發行為。這個過程好比綽號叫“瀏覽器”的人寫信找張三借錢,張三沒有錢,于是張三找李四借了一些錢,甚至還可以加上自己的一些錢,然后再將這些錢匯給了“瀏覽器”??梢姡盀g覽器”只發 出了一封信和收到了一次回復,他只知道從張三那里借到了錢,并不知道有一部分錢出自李四之手。



       4、RequestDispatcher.forward方法的調用者與被調用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應過程;而HttpServletResponse.sendRedirect方法調用者與被調用者使用各自的request對象和response對象,它們屬于兩個獨立的訪問請求和響應過程。對于同一個WEB應用程序的內部資源之間的跳轉,特別是跳轉之前要對請求進行一些前期預處理,并要使用HttpServletRequest.setAttribute方法傳遞預處理結果,那就應該使用RequestDispatcher.forward方法。不同WEB應用程序之間的重定向,特別是要重定向到另外一個WEB站點上的資源的情況,都應該使用HttpServletResponse.sendRedirect方法。



        5、無論是RequestDispatcher.forward方法,還是HttpServletResponse.sendRedirect方法,在調用它們之前,都不能有內容已經被實際輸出到了客戶端。如果緩沖區中已經有了一些內容,這些內容將被從緩沖區中。



以上五點的論述來源于:點擊查看原文論述



轉發和重定向的圖解





兩種跳轉獲得對象的方式

//獲得轉發對象getRequestDispatcher()

HttpServletRequest(httpServletRequest).getRequestDispatcher

ServletContext.getRequestDispatcher();

 

//獲得重定向對象sendRedirect()

HttpServletResponse(httpServletResponse).sendRedirect();

轉發和跳轉的小結

      1、轉發使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();



      2、轉發:瀏覽器URL的地址欄不變。重定向:瀏覽器URL的地址欄改變;



      3、轉發是服務器行為,重定向是客戶端行為;



      4、轉發是瀏覽器只做了一次訪問請求。重定向是瀏覽器做了至少兩次的訪問請求;



      5、轉發2次跳轉之間傳輸的信息不會丟失,重定向2次跳轉之間傳輸的信息會丟失(request范圍)。



轉發和重定向的選擇

      1、重定向的速度比轉發慢,因為瀏覽器還得發出一個新的請求,如果在使用轉發和重定向都無所謂的時候建議使用轉發。



      2、因為轉發只能訪問當前WEB的應用程序,所以不同WEB應用程序之間的訪問,特別是要訪問到另外一個WEB站點上的資源的情況,這個時候就只能使用重定向了。



轉發和重定向的應用場景

       在上面我已經提到了,轉發是要比重定向快,因為重定向需要經過客戶端,而轉發沒有。有時候,采用重定向會更好,若需要重定向到另外一個外部網站,則無法使用轉發。另外,重定向還有一個應用場景:避免在用戶重新加載頁面時兩次調用相同的動作。



       例如,當提交產品表單的時候,執行保存的方法將會被調用,并執行相應的動作;這在一個真實的應用程序中,很有可能將表單中的所有產品信息加入到數據庫中。但是如果在提交表單后,重新加載頁面,執行保存的方法就很有可能再次被調用。同樣的產品信息就將可能再次被添加,為了避免這種情況,提交表單后,你可以將用戶重定向到一個不同的頁面,這樣的話,這個網頁任意重新加載都沒有副作用;



       但是,使用重定向不太方便的地方是,使用它無法將值輕松地傳遞給目標頁面。而采用轉發,則可以簡單地將屬性添加到Model,使得目標視圖可以輕松訪問。由于重定向經過客戶端,所以Model中的一切都會在重定向時丟失。但幸運的是,在Spring3.1版本以后,我們可以通過Flash屬性,解決重定向時傳值丟失的問題。



       要使用Flash屬性,必須在Spring MVC的配置文件中添加一個<annotation-driven/>。然后,還必須再方法上添加一個新的參數類型:org.springframework.web.servlet.mvc.support.RedirectAttributes。



       如下所示:



@RequestMapping(value="saveProduct",method=RequestMethod.POST)

public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){

 

     //執行產品保存的業務邏輯等

  

     //傳遞參數

       redirectAttributes.addFlashAttribute("message","The product is saved successfully");

   

     //執行重定向

      return "redirect:/……";



藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計  包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。

Struts2中轉發和重定向的區別以及實現方法

seo達人

Struts2中轉發和重定向的區別以及實現方法

最近遇到一個問題,就是在設置struts2的攔截器以后,想要訪問必須登錄,想要的效果是轉到登錄頁面,也就是轉到xxx.jsp,但是發現沒有轉到,而是action結尾的,后來發現是因為在struts.xml里面配置的時候,沒有在result中配置type屬性,struts默認的是重定向,就是網址不變,解決辦法就是在result中加type=”redirect”,就可以了



轉發和重定向的區別:



重定向是不共享request的東西,重定向后的頁面中無法接收request里的東西,另外dispatcher結果類型的default屬性為TRUE,故<result-          type/>缺省為dispatcher 所以如果沒有設置type屬性的話,那么默認的是請求轉發,就是說你要是什么都不寫的話,默認就是這樣的

1

<result name="list" type="dispatcher">/admin/jsp/userAction/list.jsp</result>

1

重定向的兩個屬性: 

redirect是在處理完當前Action之后,重定向到另外一個實際的物理資源,以.jsp結尾這樣的 

redirectAction也是重定向,但它重定向到的是另外一個Action,就是以action結尾這樣的 

只要是重定向,那么之前凡是保存在request里面的東西就全都消失了 

因為重定向實際是發送第二個請求,故請求中的東西也就不會出現在第二個請求里面了 

也就是說重定向是不共享request的東西,重定向后的頁面中無法接收request里的東西,

藍藍設計m.skdbbs.com )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、 網站建設 、平面設計服務。

日歷

鏈接

個人資料

藍藍設計的小編 http://m.skdbbs.com

存檔

92国产精品视频_亚洲a级在线观看_国产精品电影观看_国产精品免费观看在线_精品伊人久久97_亚洲人成在线观_尤物九九久久国产精品的特点_成人激情在线播放_成人黄色大片在线免费观看_亚洲成人精品久久久_久久免费视频在线观看_久久精品国产一区_国产一区二区三区18_亚洲欧美中文字幕在线一区_日韩美女中文字幕_日韩视频免费在线
韩剧1988免费观看全集| 国产欧美日韩在线观看| 91麻豆蜜桃| av黄色在线观看| 美脚丝袜一区二区三区在线观看| 91高清在线观看| 国产精品日日摸夜夜摸av| 日韩精品一区二区三区中文字幕| 国产羞羞视频在线播放| 久久久婷婷一区二区三区不卡| 欧美日韩中文一区| 国产在线一区二区视频| 亚洲免费观看高清| 99精品欧美一区二区三区| 亚洲a一级视频| 日韩片电影在线免费观看| 亚洲成人黄色在线| 91久久青草| 久久久亚洲精品视频| 亚洲视频在线一区观看| 亚洲码在线观看| а√天堂资源国产精品| 日韩电影在线观看一区| 久久91亚洲精品中文字幕奶水| 91精品国产手机| 欧美精品一区二区三区久久久竹菊| 一区二区免费在线播放| 亚洲人成网站色ww在线| 国产成人av一区二区三区| 91精品久久久久久久久久久久久久| 亚洲免费观看高清完整版在线观看熊| 精品久久久久久中文字幕动漫| 亚洲成av人**亚洲成av**| 成人短视频下载| 在线免费视频一区二区| 日本欧美在线看| 成码无人av片在线观看网站| 97久久超碰国产精品电影| 中文字幕一区二区三区中文字幕| 日韩精品中文字| 69堂成人精品视频免费| 爱草tv视频在线观看992| 精品亚洲一区二区三区| 亚洲国产成人av在线| 欧美在线观看一区| 狠狠久久五月精品中文字幕| 成人影院免费观看| 久久99精品久久久野外观看| 日韩欧美一区二区三区免费观看| 久久最新资源网| 亚洲成a人片77777在线播放| 美女视频黄 久久| 免费国产自线拍一欧美视频| 亚洲天堂av老司机| 色先锋资源久久综合5566| 欧美国产一区二区| 亚洲大胆人体av| 国产一区二区三区朝在线观看| 日本精品视频网站| 色综合天天狠天天透天天伊人| 成人好色电影| 精品久久久中文| 午夜日韩在线观看| 亚洲色图欧美激情| 日韩精品伦理第一区| 成人午夜大片免费观看| 日韩.欧美.亚洲| 国产成人免费电影| 最近中文字幕一区二区三区| 国产免费av国片精品草莓男男| 亚洲伦理一区二区| 国产色综合天天综合网| 日韩精品av| 天堂一区二区在线免费观看| 国产一区在线不卡| 欧美日本免费一区二区三区| 国内精品免费**视频| 国产精品吴梦梦| 69174成人网| 日韩精品视频免费在线观看| 国产精品日韩高清| 欧美成人国产一区二区| 欧洲精品一区| 亚洲黄页网在线观看| 日本精品中文字幕| 91首页免费视频| 亚洲第一搞黄网站| 欧美日韩黄色一区二区| 精品国产不卡一区二区三区| 日韩精品三区四区| 亚洲精品国产精品国自产观看浪潮| 麻豆国产精品视频| 国产精品羞羞答答xxdd| 久久久久久久久免费| 亚洲精品一区二区在线看| 欧美日韩一区免费| 黄瓜视频成人app免费| 亚洲精品国产精品乱码不99按摩| 国产成人精品最新| 亚洲美女尤物影院| 91久久精品一区二区二区| 精品一区二区三区久久| 亚洲不卡一卡2卡三卡4卡5卡精品| 亚洲欧洲一区二区三区| 免费成人你懂的| 免费萌白酱国产一区二区三区| 亚洲影院高清在线| 久久久777精品电影网影网| 一区二区导航| 国产亚洲欧洲黄色| 中文在线不卡| 国产精品电影在线观看| 国产精品美女午夜av| 成人羞羞视频播放网站| 三妻四妾完整版在线观看电视剧| 青青草99啪国产免费| 欧美性xxxxxx| 国产日韩在线播放| 国产成人一区二区三区免费看| 国产蜜臀一区二区打屁股调教| 亚洲福利天堂| √天堂8在线网| 久久久久久久久综合| 成人黄色在线免费观看| 久久伦理网站| 久久久久一本一区二区青青蜜月| 狠狠色丁香婷婷综合久久片| 久久久久毛片免费观看| 精品久久久中文字幕| 精精国产xxx在线视频app| 国产在线观看一区二区三区| 久久久影视传媒| 日本欧美在线视频免费观看| 亚洲视频精品| 国内精品国产三级国产a久久| 精品剧情v国产在线观看在线| 蜜臀久久99精品久久一区二区| 成人午夜在线影视| 国产一区二区色噜噜| 一个色综合导航| 国产原厂视频在线观看| 欧美一区二区性放荡片| 欧美国产另类| 国产欧美日韩综合一区在线观看| 免费亚洲电影| 在线精品国产欧美| 高h视频在线播放| 黄一区二区三区| 色婷婷综合网| 欧美日韩国产综合新一区| 欧美一区永久视频免费观看| 久久久综合网| 国产精品777777在线播放| 成人免费高清| 久久伊人影院| 欧美成人一二三| 久久久久综合| 日韩在线观看一区| 92国产精品| 亚洲国产日韩欧美在线动漫| 欧美激情成人在线| 精品久久在线| 视频一区二区三区免费观看| 丝袜在线视频|