<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> 变态面试题 </title>
<script>
// //------------------变态面试题---------------------
// function Foo() {
// getName = function () {
// alert(1);
// };
// return this;
// }
// Foo.getName = function () {
// alert(2);
// };
// Foo.prototype.getName = function () {
// alert(3);
// };
// var getName = function () {
// alert(4);
// };
// function getName() {
// alert(5);
// }
// Foo.getName(); // ?
// getName(); // ?
// Foo().getName(); // ?
// getName(); // ?
// new Foo.getName(); // ?
// new Foo().getName(); // ?
// new new Foo().getName(); // ?
</script>
<script>
var now = new Date();
// 直接打印日期对象,相当于调用它的toString方法
// console.log(now);
// console.log(now.toString());
//所以如果想看属性,就要用console.dir打印
console.dir(now);
// now.getDate(); //找的是Date.prototype里提供的方法
// console.log(now.__proto__ === Date.prototype);
// console.log(now.__proto__.__proto__ == Object.prototype);
// console.log(now.__proto__.__proto__.__proto__);
// console.log(now.__proto__);
// function Person() {}
// var arr = new Array(10, 20, 30, 40, 50);
// // Array 原型
// console.log(arr.__proto__ === Array.prototype); // true
// // Object原型
// console.log(arr.__proto__.__proto__ === Object.prototype); // true
// // null
// console.log(arr.__proto__.__proto__.__proto__); // null
// console.log(Person.prototype.__proto__); // Object 原型
// // Object 原型
// console.dir(Person.__proto__); //true
// console.log(Person.__proto__); //true
// // null
// console.log(Person.prototype.__proto__.__proto__ ); // null
// console.log(Person.prototype); // Person 先找自身
// console.log(Person.prototype.__proto__); // object 找构造函数的原型
// console.log(Person.prototype.__proto__.__proto__); // null找
// console.log(Person.prototype.__proto__.__proto__.__proto__); // 报错
// console.log(arr.__proto__); // Array()
// console.log(arr.__proto__.__proto__); // Object()
// console.log(arr.__proto__.__proto__.__proto__); // null
// console.log(arr.__proto__.__proto__.__proto__.__proto__); // 报错
// 原型: 当创建一个函数的时候, 函数自身会有一些属性的方法, 其中有一个属性叫prototype, 它就是原型。
// 只要是函数都有原型
// 原型是解决性能问题的。
// 构造函数的原型, 只有它的实例化对象可以使用。
// 对象 都有__proto__( 原型链)
// 类 都有prototype( 原型)
// 函数的三个角色: 1. 函数 2. 对象 3. 类
// 换句话: 如果对象上没有; 还会( 通过自身的原型链) 找到构造函数的原型。 如果还没有会( 通过构造函数的原型链) 找到Object的原型 为止。 再没有就变量( undefined) 函数( 报错)。( 注意: 永远三步走, 自身- > 构造函数的原型 - > Object的原型)
</script>
</head>
<body>
<!-- <script src="../../Mymethod.js "></script> -->
<script>
// var wangjianlin = {
// house: {
// price: 10000000,
// adress: '洛杉矶'
// },
// car: {
// price: 5000000,
// brand: '劳斯莱斯幻影'
// }
// };
// //好男人构造函数
// function GoodMan(wife) {
// this.wife = wife;
// }
// //每一个好男人都有会煮饭的方法.
// GoodMan.prototype.ZhuFan = function () {
// console.log(this.wife + "我是好男人,我会煮饭和带娃...");
// }
// //实例化好男人对象.
// var s1 = new GoodMan('林嫂');
// s1.ZhuFan();
// console.log(s1);
// liang.extend(wangjianlin, GoodMan);
</script>
</body>
</html>
网友评论