要是招的是普通的Javascript程序员的话,我还是继续路过好了

解决方案 »

  1.   

    呵呵,祝福 btbtd,本人目前从事这方面的工作:说实话,合格的web前端工程师确实很难找。什么叫合格的呢? 既然做web前端,w3c,css,html都需要熟知吧,各个浏览器之间的差异应该很清楚并且可以给出解决方案吧至于javascript,这个要求应该是比较精通了吧,能够以面向对象的方式去开发javascript应用,不要老是拿来主意。
    至于B/S开发模式及原理,这个了解即可,因为完全不知道的话 那么你和server端程序员讨论接口的时候就会出于尴尬之地
    至于本科学历,我倒是觉得完全没有必要
      

  2.   


    对这点表示不太赞同,既然是javascript程序员,那么说明公司是比较重视,才会单独拿出一个 职位 作为javascript程序员的职位。再说既然写javascript必然和html/css分不开,那么你有什么理由 继续路过呢 ?
      

  3.   

    有些公司和部门 比较傲慢 ,面试后回复都没有,确实是
    不过还好了,只要我们自己不卑不亢,再接再厉,管他们怎么做呢? 相信自己的实力就好,很喜欢和web前端开发的朋友们交流。。
      

  4.   


    看过 btbtd 的作品,水平肯定在楼主的要求之上。
      

  5.   

    还在大四, 研究ajax(js,dom,xml),html,css时间5个月
    之前搞的java, 英语六级过关, 工作经验不足.正在一家公司实习, 负责网页游戏js库的设计编写.
      

  6.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style type="text/css">
    </style>
    </head>
    <body>
    <script type="text/javascript">
    function extend(){
    var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, options;
    if ( typeof target === "boolean" ) {
    deep = target;
    target = arguments[1] || {};
    i = 2;
    }
    if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]")
    target = {};
    for(;i<length;i++){
    if ( (options = arguments[ i ]) != null )
    for(var name in options){
    var src = target[ name ], copy = options[ name ];
    if ( target === copy )
    continue;
    if ( deep && copy && typeof copy === "object" && !copy.nodeType ){
    target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy );
    }   
    else if(copy !== undefined)
    target[ name ] = copy;                       
    }

    }
    return target;           
    };
    //----------------------------------------------------------------------------
    (function(){
    var window = this, now=function(){return +new Date;},jsc = now(),
    ajaxSettings = {
    url: 'http://www.beiju.com?a=a',
    global: true,
    type: "GET",
    contentType: "application/x-www-form-urlencoded",
    processData: true,
    async: true,
    xhr:function(){
    return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    },
    accepts: {
    xml: "application/xml, text/xml",
    html: "text/html",
    script: "text/javascript, application/javascript",
    json: "application/json, text/javascript",
    text: "text/plain",
    _default: "*/*"
    }
    };
    //**************************************************************************************************
    window.ajax = function(s){
    s = extend(true, s, extend(true,{},ajaxSettings, s));
    var jsre = /=\?(&|$)/g, jsonp,data,type = s.type.toUpperCase();

    //暂时考虑的都是jsonp的情况 所以这里横成立
    if ( s.dataType == "jsonp" ) {
    if ( type == "GET" ) {
    if ( !s.url.match(jsre) )
    //如果url中没有?  就代表 只是一个url 没有参数  所以后面+上callback
    //如果有? 代表有参数 所以用&来连接jsonp的形式
    s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
    } else if ( !s.data || !s.data.match(jsre) )
    s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
    s.dataType = "json";
    };

    //这里页是横成立的
    if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { 
    //jsc是上面算出来的 ++后 就可以一直都是唯一的了
    jsonp = "jsonp" + jsc++;
    if ( s.data )
    s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
    //把=?替换成 = jsonp + 时间戳  因为下面要设置成全局的  所以能避免冲突
    s.url = s.url.replace(jsre, "=" + jsonp + "$1"); s.dataType = "script";

                //加上一个全局的 变量  这个就是回调函数了
    window[ jsonp ] = function(tmp){
    data = tmp;
    success();  //回调吧  都不知道那里冒出来的
    complete();
    window[ jsonp ] = undefined;
    try{ delete window[ jsonp ]; } catch(e){}
    if ( head )
    head.removeChild( script );
    };
    } //不明白cache属性是做什么用的
    if ( s.dataType == "script" && s.cache == null )
    s.cache = false;


    if ( s.cache === false && type == "GET" ) {
    var ts = now();
    var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
    //这个难道是为了避免缓存+上的时间戳
    s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
    }; if ( s.data && type == "GET" ) {
    s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
    // IE likes to send both get and post data, prevent this
    s.data = null;
    };

    //一个判断url的正则 parts[0]为整个 1为头  2为域名
    var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url ); if ( s.dataType == "script" && type == "GET" && parts&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
    //创建标签并建立好回调
    var head = document.getElementsByTagName("head")[0];
    var script = document.createElement("script");
    script.src = s.url;
    if (s.scriptCharset)
    script.charset = s.scriptCharset;

    // Handle Script loading
    if ( !jsonp ) {
    var done = false;
    script.onload = script.onreadystatechange = function(){
    if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) {
    done = true;
    success();
    complete();
    script.onload = script.onreadystatechange = null;
    head.removeChild( script );
    }
    }

    }
    head.appendChild(script);
    // We handle everything using the script element injection
    return undefined;
    }
    };
    //**************************************************************************************************
    })();
    var a = ajax({
    jsonp : 'dabeiju',
    dataType : 'jsonp'
    });
    </script>
    </body>
    </html>
      

  7.   

    function extend(){
    var target = arguments[0] || {}, i = 1, length = arguments.length, deep = true, options;
    if ( typeof target === "boolean" ) {
    deep = target;
    target = arguments[1] || {};
    i = 2;
    }
    if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]")
    target = {};
    for(;i<length;i++){
    if ( (options = arguments[ i ]) != null )
    for(var name in options){
    var src = target[ name ], copy = options[ name ];
    if ( target === copy )
    continue;
    if ( deep && copy && typeof copy === "object" && !copy.nodeType ){
    target[ name ] = arguments.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy );
    }   
    else if(copy !== undefined)
    target[ name ] = copy;                       
    }

    }
    return target;           
    };
    //----------------------------------------------------------------------------
    (function(){
    var window = this, now=function(){return +new Date;},jsc = now(),
    ajaxSettings = {
    url: 'http://www.beiju.com?a=a',
    global: true,
    type: "GET",
    contentType: "application/x-www-form-urlencoded",
    processData: true,
    async: true,
    xhr:function(){
    return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    },
    accepts: {
    xml: "application/xml, text/xml",
    html: "text/html",
    script: "text/javascript, application/javascript",
    json: "application/json, text/javascript",
    text: "text/plain",
    _default: "*/*"
    }
    };
    //**************************************************************************************************
    window.ajax = function(s){
    s = extend(true, s, extend(true,{},ajaxSettings, s));
    var jsre = /=\?(&|$)/g, jsonp,data,type = s.type.toUpperCase();

    //暂时考虑的都是jsonp的情况 所以这里横成立
    if ( s.dataType == "jsonp" ) {
    if ( type == "GET" ) {
    if ( !s.url.match(jsre) )
    //如果url中没有?  就代表 只是一个url 没有参数  所以后面+上callback
    //如果有? 代表有参数 所以用&来连接jsonp的形式
    s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
    } else if ( !s.data || !s.data.match(jsre) )
    s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
    s.dataType = "json";
    };

    //这里页是横成立的
    if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { 
    //jsc是上面算出来的 ++后 就可以一直都是唯一的了
    jsonp = "jsonp" + jsc++;
    if ( s.data )
    s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
    //把=?替换成 = jsonp + 时间戳  因为下面要吧回调函数名设置成全局的  所以能避免冲突
    s.url = s.url.replace(jsre, "=" + jsonp + "$1"); s.dataType = "script";

                //加上一个全局的 变量  这个就是回调函数了
    window[ jsonp ] = function(tmp){
    data = tmp;
    alert(1)
    success();  //回调吧  都不知道那里冒出来的
    complete();
    window[ jsonp ] = undefined;
    try{ delete window[ jsonp ]; } catch(e){}
    if ( head )
    head.removeChild( script );
    };
    } //不明白cache属性是做什么用的
    if ( s.dataType == "script" && s.cache == null )
    s.cache = false;


    if ( s.cache === false && type == "GET" ) {
    var ts = now();
    var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
    //这个难道是为了避免缓存+上的时间戳
    s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
    }; if ( s.data && type == "GET" ) {
    s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
    // IE likes to send both get and post data, prevent this
    s.data = null;
    };

    //一个判断url的正则 parts[0]为整个 1为头  2为域名
    var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
    //如果不是请求的当前页面
    if ( s.dataType == "script" && type == "GET" && parts&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
    //创建标签并建立好回调
    var head = document.getElementsByTagName("head")[0];
    var script = document.createElement("script");
    script.src = s.url;
    if (s.scriptCharset)
    script.charset = s.scriptCharset;
    // Handle Script loading
    if ( !jsonp ) {
    var done = false;
    script.onload = script.onreadystatechange = function(){

    if ( !done && (!this.readyState ||this.readyState == "loaded" || this.readyState == "complete") ) {
    done = true;

    success();
    complete();
    script.onload = script.onreadystatechange = null;
    head.removeChild( script );
    }
    }

    }
    head.appendChild(script);
    // We handle everything using the script element injection
    return undefined;
    }
    };
    //**************************************************************************************************
    })();
    var a = ajax({
    jsonp : 'dabeiju',
    dataType : 'jsonp',
    url : 'http://www.google.com/base/feeds/snippets?q=jquery&alt=json-in-script'
    });