IIssNan's Notes

Quick notes


  • 首页

  • 归档

  • 标签

  • 搜索

JavasSript Prototype对象的初始值

发表于 2012-06-06 | | 阅读次数

Javascript prototype的初始值在Object-Oriented Javascript 这本书第五章中提到:

prototype is a property that gets created as soon as you define the function.It’s initial value is a empty object

这句话应该是错误的。prototype的初始值并不是一个空的对象,而是包含了constructor这个属性,值既指向构造函数:

1
2
function Func(){}
console.log(Func.prototype.hasOwnProperty('constructor')); // 输出true`

这样,后面的Own Properties versus prototype Properties小节的代码才能够说的通:

1
2
newtoy.constructor // 输出Gadget(name, color)
newtoy.constructor.prototype.constructor // 输出Gadget(name, color)

Gadget.prototype是一个普通的对象,那么这个对象的constructor默认应该是指向Object();
然而因为prototype拥有一个constructor的自身属性,也就是prototype.hasOwnProperty('constructor')为true,从而覆盖掉由继承而来的constructor值。

JavaScript 中的 undefined

发表于 2012-03-30 | | 阅读次数

JavaScript 的 undefined 是个非常有趣的东西。

  1. 首先,undefined 在 JavaScript 里面是一种原始类型,并且类型有且仅有一个值,就是 undefined;
  2. 其次,JavaScript 在全局范围定义了一个变量,这个变量的值是 undefined,他的名字也是 undefined。

undefined 的不确定性

但是这个全局变量并非一个常量,也不是一个保留字。也就是说,这个值是可以被更改,所以这个语句完全是有效的:

1
undefined = "something else";

由于 undefined 的不确定性,所以需要判断一个变量是否是 undefined 的时候不能直接使用如下语句:

1
2
3
if (o.abc === undefined) {
// do something
}

使用技巧

常见的更为可靠的方法有:使用 typeof操作符、void 操作符、函数形参。typeof 操作符返回操作数的类型(字符串),若操作数是 undefined 类型,那么返回 “undefined”,使用方法如下:

1
typeof variable === "undefined";

void 操作符执行表达式并返回 undefined:

1
2
3
function isUndefined(obj) {
return obj === void 0;
}

在 JavaScript 中,当函数的形参的个数多于实际传入的参数时,多余部分的形参的值将设成 undefined。故可通过此方法来确定 undefined。

1
2
3
4
5
(functon abc(root, undefined) {
if (root.abc === undefined) {
// do something
}
}(this));

JavaScript 的函数声明

发表于 2012-03-23 | | 阅读次数

使用 function 关键字声明函数

1
function foo(){}

使用 函数表达式 声明函数

1
var bar = function(){}

使用 Function构造函数 声明函数

1
var foobar = Function('arg1', 'arg2', 'function body')

Detecting support of local storage

发表于 2011-12-29 | | 阅读次数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function LocalStorage(){}
extend(LocalStorage.prototype, {
isSupportCookie : function(){
return navigator.cookieEnabled;
},
isSupportUserData : function(){
var t = document.createElement('input');
return (typeof t.addBehavior !== 'undefined');
},
isSupportDOMStorage : function(){
return (typeof window.localStorage !== 'undefined');
}
});

特性检测 IE9 及以下的 IE 浏览器

发表于 2011-12-26 | | 阅读次数

根据 border-radius css3 属性(或者其他未被 IE9 支持的属性)来判断:

1
2
3
4
var isLt9 = function(){
return document.all &&
typeof document.body.style.borderRadius === 'undefined';
}
1…282930…37
IIssNan

IIssNan

胡编一通,乱写一气

183 日志
6 分类
111 标签
RSS
GitHub Twitter 豆瓣 知乎
© 2011 - 2017 IIssNan
由 Hexo 强力驱动
主题 - NexT.Pisces
0%