考察一下你对js继承链的理解
2016-07-22 14:41
399 查看
请深入理解下面的程序,并解释输出结果
运行环境: maxOS,node v6.3.1, 非严格模式运行
var print = function(input){
console.log(input);
}
function Foo(){
getName = function() { print(1)}
return this;
}
Foo.getName = function(){
print(2);
}
Foo.prototype.getName = function(){
print(3);
}
var getName = function(){
print(4);
};
function getName(){
print(5);
}
Foo.getName(); //2
getName(); //4
// Foo().getName(); // function not defined
getName(); //4
new Foo.getName(); //2
new Foo().getName(); //3
new new Foo().getName(); //3
下面是第二个程序,仅修改了一句话:
var print = function(input){
console.log(input);
}
function Foo(){
getName = function() { print(1)}
<span style="background-color: rgb(255, 204, 204);">this.getName = function() { print(0)}</span>
return this;
}
Foo.getName = function(){
print(2);
}
Foo.prototype.getName = function(){
print(3);
}
var getName = function(){
print(4);
};
function getName(){
print(5);
}
Foo.getName(); //2
getName(); //4
Foo().getName(); // 0
getName(); //1
new Foo.getName(); //2
new Foo().getName(); //0
new new Foo().getName(); //0
能够考虑清楚上面程序的输出结果,那么说名你对js的继承链方式理解的差不多啦。 那么,你想通了吗?
运行环境: maxOS,node v6.3.1, 非严格模式运行
var print = function(input){
console.log(input);
}
function Foo(){
getName = function() { print(1)}
return this;
}
Foo.getName = function(){
print(2);
}
Foo.prototype.getName = function(){
print(3);
}
var getName = function(){
print(4);
};
function getName(){
print(5);
}
Foo.getName(); //2
getName(); //4
// Foo().getName(); // function not defined
getName(); //4
new Foo.getName(); //2
new Foo().getName(); //3
new new Foo().getName(); //3
下面是第二个程序,仅修改了一句话:
var print = function(input){
console.log(input);
}
function Foo(){
getName = function() { print(1)}
<span style="background-color: rgb(255, 204, 204);">this.getName = function() { print(0)}</span>
return this;
}
Foo.getName = function(){
print(2);
}
Foo.prototype.getName = function(){
print(3);
}
var getName = function(){
print(4);
};
function getName(){
print(5);
}
Foo.getName(); //2
getName(); //4
Foo().getName(); // 0
getName(); //1
new Foo.getName(); //2
new Foo().getName(); //0
new new Foo().getName(); //0
能够考虑清楚上面程序的输出结果,那么说名你对js的继承链方式理解的差不多啦。 那么,你想通了吗?
相关文章推荐
- jsp遍历map集合
- js实现下拉菜单
- JavaScript之数组排序
- 预编译 作用域例子
- js实现一个简单的树形菜单
- JavaScript设计模式学习之路——继承
- 原生js的ajax请求
- Ajax_数据格式_JSON(03)
- js 处理input元素为数字
- js实现菜单折叠导航
- 在你的网页集成QQ推广即时聊天
- javascript 保留小数位数,四舍五入
- 实现HTML编码和解码的JavaScript工具类(未测试)
- 优化Javascript数据遍历(未测试)
- 关于 js 2个数组取差集怎么取
- js动态创建按钮 (未测试)
- js嵌套使用 双引号和单引号
- js和el表达式操作list
- javascript放在head和body之间的区别
- Web开发之-JSP学习总结-第四篇:自定义标签总结