当前位置:  编程技术>WEB前端
本页文章导读:
    ▪iphone webapp隐藏地址栏      1、很多资料说,添加以下代码,可以隐藏地址栏,但我试了很多次,貌似不成功啊。<meta name="apple-mobile-web-app-capable" content="yes" />2、我们可以通过另一种方法来隐藏地址栏。在页面加载完.........
    ▪JavaScript中delete操作符不能删除的对象      ES3 中,delete在8.6.2.5及11.4.1有介绍,如下 有一些信息,1、实现上delete操作符会调用引擎内部的[[Delete]]方法2、[[Delete]]在8.6.2里定义3、删除的属性有个DontDelete的特性,如果有,delete时直.........
    ▪码农干货系列【7】--为什么不使用requirejs和seajs      起源 前不久看到了玉伯的这篇文章,https://github.com/seajs/seajs/issues/547,文章名字叫做《前端模块化开发的价值》,文章不断地列举了非模块化的一些缺陷和问题所在,最后引入了seajs怎么解决.........

[1]iphone webapp隐藏地址栏
    来源:    发布时间: 2013-11-06

1、很多资料说,添加以下代码,可以隐藏地址栏,但我试了很多次,貌似不成功啊。

<meta name="apple-mobile-web-app-capable" content="yes" />

2、我们可以通过另一种方法来隐藏地址栏。在页面加载完成之后滚动窗口,这个确实有效,唯一要注意的是页面高度必须够高,核心代码如下:

<script type="text/javascript">
addEventListener("load", function() { setTimeout(hideURLbar, 0); }, false);
function hideURLbar(){
window.scrollTo(0,1);
}
</script>

3、但是当页面高度自适应窗口(height:100%),以上方法就不适用了,我们需要采用特殊方法:

$('div').css("height",window.innerHeight+100); //强制让内容超过

window.scrollTo(0, 1);

$("div").css("height",window.innerHeight); //重置成新高度

document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); //如果不想让页面滑动,可以加上这段代码

 

参考资料:http://jslover.com/?p=357

 

 

本文链接


    
[2]JavaScript中delete操作符不能删除的对象
    来源:    发布时间: 2013-11-06

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)

function func() {
delete arguments;
alert(arguments);
}
func(1);

 

2,变量声明 (10.2.1)

var a = 10;
delete a;
alert(a); // 10

这一条在很多JS书里有提及,即不能delete掉使用var声明的变量。

 

3,函数声明

function func() {}
delete func;
alert(func); // func code

 

4,函数的length属性

function func(a, b) {}
delete func.length;
alert(func.length); // 2

 

5,一些常量(NaN、Infinity、undefined)

delete NaN; // false
delete Infinity; // false
delete undefined; // false

 

6,内置构造器的prototype

delete Object.prototype; // false
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

var arr = [], str = 'hello';
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)

delete Math.E; // false
...

  

9,正则对象的属性(source、global、ignoreCase、multiline、lastIndex)

var reg = /ss/;
delete reg.source; // false
...

  

ES5 与ES3不同,ES5中没有“DontDelete”,却增加了 [[Configurable]] (8.6.1)。

如果该值为false,则不能delete,以上列举的9点在ES5中描述为[[Configurable]]为false。

 

ES5新增的Object.defineProperty方法可显示的定义对象的Configurable,如下

var obj = {name: 'John'};
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的对象时会直接抛异常。如

"use strict";
delete Object.prototype;

FF中控制台报错如下

 

除了内置对象的一些方法或属性不能删除外,自定义对象也有不能删除的。如delete不能删除对象继承来自原型上的属性

function Person() {}
Person.prototype.name = 'John Backus';
var p = new Person();
delete p.name;
console.log(p.name); // 仍然输出 John Backus

如果this和prototype上都有name,那么delete后,会将prototype上的呈现出来

function Person() {
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,只能

delete Person.prototype.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

 

本文链接


    
[3]码农干货系列【7】--为什么不使用requirejs和seajs
    来源:    发布时间: 2013-11-06

起源

前不久看到了玉伯的这篇文章,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.Net
Imports 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模块加载器。

本文链接


    
最新技术文章:
▪css white-space:nowrap属性用法(可以强制文字不...
▪IE里button设置border:none属性无效解决方法
▪border:none与border:0使用区别
▪html清除浮动的6种方法示例
▪三个不常见的 HTML5 实用新特性简介
▪css代码优化的12个技巧
▪低版本IE正常运行HTML5+CSS3网站的3种解决方案
▪CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chr...
▪ie6,ie7,ie8完美支持position:fixed的终极解决方案
▪小技巧处理div内容溢出
▪html小技巧之td,div标签里内容不换行
▪纯CSS实现鼠标放上去改变文字内容
▪li中插入img图片间有空隙的解决方案
▪CSS3中Transition属性详解以及示例分享
▪父div高度不能自适应子div高度的解决方案
▪告别AJAX实现无刷新提交表单
▪从零学CSS系列之文本属性
▪HTML 标签
▪CSS3+Js实现响应式导航条
▪CSS3实例分享之多重背景的实现(Multiple background...
▪用css截取字符的几种方法详解(css排版隐藏溢...
▪页面遮罩层,并且阻止页面body滚动。bootstrap...
▪CSS可以做的几个令你叹为观止的实例分享
▪详细分析css float 属性以及position:absolute 的区...
▪IE6/IE7/IE8/IE9中tbody的innerHTML不能赋值的完美解...
▪CSS小例子(只显示下划线的文本框,像文字一...
▪可以给img元素设置背景图
▪不通过JavaScript实现的自动滚动视差效果
▪div+CSS 兼容小摘
▪CSS的inherit与auto使用分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3