1、很多资料说,添加以下代码,可以隐藏地址栏,但我试了很多次,貌似不成功啊。
2、我们可以通过另一种方法来隐藏地址栏。在页面加载完成之后滚动窗口,这个确实有效,唯一要注意的是页面高度必须够高,核心代码如下:
addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false);
function hideURLbar(){
window.scrollTo(0,1);
}
</script>
3、但是当页面高度自适应窗口(height:100%),以上方法就不适用了,我们需要采用特殊方法:
window.scrollTo(0, 1);
$("div").css("height",window.innerHeight); //重置成新高度
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); //如果不想让页面滑动,可以加上这段代码
参考资料:http://jslover.com/?p=357
本文链接
ES3 中,delete在8.6.2.5及11.4.1有介绍,如下
有一些信息,
1、实现上delete操作符会调用引擎内部的[[Delete]]方法
2、[[Delete]]在8.6.2里定义
3、删除的属性有个DontDelete的特性,如果有,delete时直接返回false
搜索“DontDelete”,会发现有很多,如下都不能delete
1, 激活对象的arguments对象 (10.1.6)
delete arguments;
alert(arguments);
}
func(1);
2,变量声明 (10.2.1)
delete a;
alert(a); // 10
这一条在很多JS书里有提及,即不能delete掉使用var声明的变量。
3,函数声明
delete func;
alert(func); // func code
4,函数的length属性
delete func.length;
alert(func.length); // 2
5,一些常量(NaN、Infinity、undefined)
delete Infinity; // false
delete undefined; // false
6,内置构造器的prototype
delete Function.prototype; // false
delete Array.prototype; // false
delete ExpReg.prototype; // false
delete Date.prototype; // false
delete Error.prototype; // false
delete Number.prototype; // false
delete Boolean.prototype; // false
delete String.prototype; // false
7, 数组和字符串的length
delete arr.length; // false
delete str.length; // false
8,Math对象的属性(Math.E、Math.LN10、Math.LN2、Math.LOG2E、Math.LOG10E、Math.PI、Math.SQRT1_2、Math.SQRT2)
...
9,正则对象的属性(source、global、ignoreCase、multiline、lastIndex)
delete reg.source; // false
...
ES5 与ES3不同,ES5中没有“DontDelete”,却增加了 [[Configurable]] (8.6.1)。
如果该值为false,则不能delete,以上列举的9点在ES5中描述为[[Configurable]]为false。
ES5新增的Object.defineProperty方法可显示的定义对象的Configurable,如下
Object.defineProperty(obj, "key", {
configurable: false,
value: "static"
});
delete obj.name; // true
delete obj.key // false
对象obj有name,key。name可以delete,key则不行。
此外ES5严格模式中delete configuable为false的对象时会直接抛异常。如
delete Object.prototype;
FF中控制台报错如下
除了内置对象的一些方法或属性不能删除外,自定义对象也有不能删除的。如delete不能删除对象继承来自原型上的属性
Person.prototype.name = 'John Backus';
var p = new Person();
delete p.name;
console.log(p.name); // 仍然输出 John Backus
如果this和prototype上都有name,那么delete后,会将prototype上的呈现出来
this.name = 'John Backus';
}
Person.prototype.name = 'John Resig';
var p = new Person();
console.log(p.name); // John Backus
delete p.name;
console.log(p.name); // John Resig, 来自原型
如果非要删除原型上的name,只能
总结下:
1,内置对象的属性及方法多数不能delete(虽然有些能delete,如isNaN、parseInt)
2,对象继承于原型的属性和方法不能delete
原因也很简单,
1,内置对象的属性及方法多数不能delete保护该语言最核心API,这些API被delete了,基本上就废了。如delete Object.prototype。
2,对象继承于原型的属性和方法不能delete是出于保护原型,否则 “类A的对象delete了原型上的属性,那么继承于A的都将丢失该属性”。
相关:
JavaScript声明全局变量三种方式的异同
JavaScript中两种类型的全局对象/函数
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty
本文链接
起源
前不久看到了玉伯的这篇文章,https://github.com/seajs/seajs/issues/547,文章名字叫做《前端模块化开发的价值》,文章不断地列举了非模块化的一些缺陷和问题所在,最后引入了seajs怎么解决的方式。其实作为一名“资罙”的当耐特工程师,不管是AMD的requirejs还是CMD的seajs,都不符合我的口味。因为我有着浓厚的当耐特程序编码情节和风格,容易出现特殊群体的特殊偏执观点,所以欢迎拍砖。
我喜欢的模块化风格
using System;using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication2
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
没错,上面这段代码就是我喜欢的风格。using代码依赖项,namespace代表暴露给外面的命名空间,一目了然,非常清晰易懂。而在这篇文章http://chaoskeh.com/blog/why-seajs.html当中,
拿seajs的
var util = require('./util.js');好比CSS的
@import url(/blog_article/"base.css");这个类比太不恰当了!因为上面多了个var util=。 为什么CSS不见
var base= @import url(/blog_article/"base.css");别小看这一点点区别,它会给你带来很大的麻烦。
go to define
现在许多IDE已经加入的javascript的go to define功能,比如VS2012:
虽然使用seajs时候,var util = require('./util.js')是同步的,但是它也逃避不了一个致命伤---go to define。go to define到底有多重要?在复杂的、大规模的程序开发当中,go to define的重要性不言而喻,甚至比模块化还重要。假如在模块化和go to define二者只能满足一个的情况下,我情愿不要模块化。那么两者能同时满足吗??
define([ "require", "jquery", "blade/object", "blade/fn", "rdapi","oauth", "blade/jig", "blade/url", "dispatch", "accounts",
"storage", "services", "widgets/AccountPanel", "widgets/TabButton",
"widgets/AddAccount", "less", "osTheme", "jquery-ui-1.8.7.min",
"jquery.textOverflow"],
function (require, $, object, fn, rdapi,
oauth, jig, url, dispatch, accounts,
storage, services, AccountPanel, TabButton,
AddAccount, less, osTheme) {
});.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
像上面requirejs的代码是没有希望go to define了,话说seajs比requirejs有了不小进步,但是他们都越不过'./util.js'这个坑,因为它只是个字符串,其他什么都不是(理论上可以),其实VS2012已经做了,只要你拖入个这样的reference。
/// <reference path="sizzle.js" />
就有了智能提示,并且可以go to define。那么var util = require('./util.js')前面的var util是不是非常多余?它在阻碍IDE发展?
脚本加载
脚本加载就两种最优方式:
所有脚本压缩至一个脚本文件当中,all-in-one-js,前提是所有javascript按照依赖关系排列好顺序;
另外一种是所有javascript并行加载,不分先后,但是加载完之后,按照依赖关系按顺序执行。
可是seajs不是其中的任何一种!?!?
其他语言
PHP
include 'vars.php';JAVA
import java.io.*;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }C++
#include "stdafx.h"VB
Imports System.NetImports System.Web.Http.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }
…
…
…
所以我不能接受:
var util = require('./util.js');因为它已经有了更好的组织和引入方式,敬请关注我的javascript模块加载器。
本文链接