我是一个后端程序员,我想知道一件事.我只知道一点Javascript.当我查看一些Javascript代码时,我知道基础知识,我理解代码正在尝试做什么.但我从未用它来制作动画.
然后我听说了jQuery.在不了解Javascript的情况下,我可以成为jQuery的专家吗?
Ajax怎么样?我可以使用jQuery进行Ajax动画(搜索建议),而不必学习Javascript吗?
function funcObj() { }
funcObj.prototype.greet = "hello";
console.log(funcObj.greet) // undefined ???
console.log(funcObj.prototype.greet) // hello
var obj = new funcObj();
console.log(obj.greet); // hello
Run Code Online (Sandbox Code Playgroud)
根据我对原型的理解.如果访问对象的成员,则当该对象中不可用时,它将从原型对象获取它.
我的问题是:
因为Javascript中的函数是对象的原因funcObj.greet- > undefined,但是obj.greet- >你好?
我正在创建两个对象(继承),都从Base继承.第二个对象的属性赋值会覆盖第一个对象中的值.
有什么想法吗?如何进行适当的继承,以便Base类将包含其继承后代的公共成员,但后代可以分配自己的值而不会相互干扰.
var testParams1 = { title: "john" };
var testParams2 = { title: "mike" };
Function.prototype.inheritsFrom = function (baseClass)
{
this.prototype = new baseClass;
this.prototype.constructor = this;
this.prototype.base = baseClass.prototype;
return this;
};
function Base() {
this.viewModel = {};
this.viewModel.title = (function ()
{
var savedVal = "";
return function (newVal)
{
if (typeof (newVal) === "undefined")
{
return savedVal;
}
savedVal = newVal;
};
})();
}
function Inherits(params) {
this.viewModel.title(params.title);
}
Inherits.inheritsFrom(Base);
///// preparing code:
var testObj1 = …Run Code Online (Sandbox Code Playgroud) 在JavaScript,你会经常看到说document.getElementById("element").someFunction();或$("element").someFunction();代替的功能someFunction($("element"));.凡someFunction(element)看起来像下面的代码一点点.
someFunction(element) {
//element.doSomething();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是你如何创建一个函数来操作它所附加的元素而不是操纵作为参数传递的元素?
所以我一直在了解 JavaScript 的一些新特性,并且一直在阅读 Object.setPrototypeOf()。我从MDN 中遇到了这段代码,它处理从常规对象的继承。但我对他们在这里如何使用 Object.setPrototypeOf() 感到困惑。我希望他们写
Object.setPrototypeOf(Dog, Animal)
Run Code Online (Sandbox Code Playgroud)
与下面的操作相反。他们为什么这样写?
var Animal = {
speak() {
console.log(this.name + ' makes a noise.');
}
};
class Dog {
constructor(name) {
this.name = name;
}
}
Object.setPrototypeOf(Dog.prototype, Animal);// If you do not do this you will get a TypeError when you invoke speak
var d = new Dog('Mitzie');
d.speak(); // Mitzie makes a noise.
Run Code Online (Sandbox Code Playgroud) 据我所知,函数应该从其prototype对象继承属性,可以使用.prototype或__proto__属性访问它.
//my prototype Object
var myObj = {
a: 1,
b: 2
};
var myFunc = function () {};
// setting function's `prototype` property
myFunc.prototype = myObj;
alert(myFunc.a);
//returns undefined (Why???) I was expecting 1
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试以下,
//setting function __proto__ property
myFunc.__proto__ = myObj;
//returns 1
alert(myFunc.a);
Run Code Online (Sandbox Code Playgroud)
那么为什么它在我设置myFunc.__proto__时起作用而不是在我设置时起作用myFunc.prototype?
我确实参考了__proto__ VS. JavaScript中的原型但无法弄清楚.
在阅读Javascript的原型时,我遇到了这种行为,我无法解释.我在chrome的控制台(V8)中测试它.
var fruit = {taste:'good'};
var banana = Object.create(fruit);
console.log(banana.taste); //"good"
console.log(banana.__proto__); //Object {taste: "good"}
console.log(Object.getPrototypeOf(banana)); //Object {taste: "good"}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都如预期.但是,如果我这样做:
var drink = Object.create(null);
Object.defineProperty(drink, 'taste', {value:"nice"});
var coke = Object.create(drink);
console.log(coke.taste); //"nice"
console.log(coke.__proto__); //undefined
console.log(Object.getPrototypeOf(coke)); //Object {taste: "nice"}
Run Code Online (Sandbox Code Playgroud)
然后coke.__proto__ === undefined.为什么是undefined第二种情况?
我正在学习Javascript中面向对象编程的旅程.我从这里获得了这个视频版本http://www.objectplayground.com/我理解了相当多的原型方法而不是经典方法.
在观察内容时,我暂停了显示的经典方法与子类一起使用的示例,如下所示:
//superclass
function Answer(value){
this._val = value;
}
//define prototype property 'get' for the superclass
Answer.prototype.get = function fn1(){
return this._val;
}
//subclass
function FirmAnswer(value){
Answer.call(this,value);
}
FirmAnswer.prototype = Object.create(Answer.prototype);
FirmAnswer.prototype.constructor = FirmAnswer;
//define prototype property 'get' for subclass
FirmAnswer.prototype.get = function fn2(){
return Answer.prototype.get.call(this);
}
var luckAnswer = new FirmAnswer(7);
luckAnswer.get(); //7
Run Code Online (Sandbox Code Playgroud)
题:
从我的理解call函数,它将设置this当前上下文是例如从该行Answer.call(this,value)从FirmAnswer功能,所以_val从Answer会为设置FirmAnswer而不是为Answer(请纠正我,如果我错了).
因此,如果上述分析是正确的,那么它会导致我的混淆,为什么返回的get属性而不仅仅是因为已经设置为调用时?FirmAnswer.prototypeAnswer.prototype.get.call(this)Answer.prototype.get() …
javascript prototype-programming prototype-chain prototype-pattern
[首先,这个问题可能与JavaScript .prototype如何工作有相同的概念?,但有不同的背景.]
我看到这个博客说:
在JavaScript中,每个对象都有一个名为"prototype"的属性.对象的原型允许我们向该对象的所有实例添加属性(甚至是现有实例).
根据我到目前为止的理解,上述陈述对于初学者来说是令人困惑的,因为它没有区分"原型"和"[[原型]]".并非所有对象都具有prototype属性,例如:
var myobject = {};
myobject.prototype; // Undefined
Run Code Online (Sandbox Code Playgroud)
我想如果我们说:
在JavaScript中,每个对象都有一个名为"[[Prototype]]"的内部属性,在某些浏览器中可以通过访问名为"__proto__"的非标准属性来查看.对象的原型允许我们向该对象的所有实例添加属性(甚至是现有实例).只有函数(因此构造函数)具有'prototype'属性来设置,允许我们向该函数/构造函数的所有对象实例添加属性.
这是对JavaScript原型的更准确的描述,还是我错过了什么?提前致谢.
我在javaScript中比较新,我正在做一些继承.我以为我知道原型是什么,但后来我遇到了超级方法.现在我不知道这两者之间的区别.我知道优步就像java中的超级一样.但是原型是令我困扰的东西.如果你能给我一些使用这两个的简单例子我会非常感激.
javascript ×10
prototype ×4
function ×2
jquery ×2
ajax ×1
animation ×1
ecmascript-6 ×1
inheritance ×1
v8 ×1